$DESCRIPTION
> 本地使用的FlyAI Python库版本需要大于等于0.6.4
-
第一步:参赛选手从FlyAI官网选择比赛报名,可在线查看代码并下载代码
下载的项目中不包含数据集,运行main.py会自动下载调试数据集
本地调试根据不同数据集会提供60%~100%数据,全量数据提交到GPU后会自动更新替换
-
第二步:本地代码调试
本地配置Python3.5以上的运行环境,并安装项目运行所需的Python依赖包 app.json是项目的配置文件
在main.py中编写神经网络,没有框架限制
在prediction.py测试模型是否评估成功
main.py中需在class Main(FlyAI) 类中实现自己的的训练过程
-
第三步:提交到GPU训练,保存模型
本地调试完成之后,提交代码到GPU,在全量数据上训练模型,保存最优模型。
提交GPU的方式有:FlyAI客户端、FlyAI脚本命令、网站在线提交。
-
第四步:评估模型,获取奖金,实时提现
GPU训练完成后,会调用prediction.py中的predict方法进行评估,并给出最后得分
高分的参赛选手,可实时获取奖金,通过微信提现
比赛遇到问题不要着急可以添加FlyAI小助手微信,小姐姐在线解答您的问题。
-
flyai.exe/flyai
Windows用户双击flyai.exe,启动FlyAI客户端,本地调试项目
MAC和Linux用户在终端执行flyai脚本,本地调试项目
参赛选手还可以使用自己电脑上的Python环境,安装项目依赖,运行main.py来调试。
-
使用jupyter调试.ipynb
比赛项目可以使用jupyter本地调试和提交
flyai.exe支持一键配置并启动jupyter lab本地调试和提交
-
app.json
项目的说明描述文件,用来查看项目,不需要修改
-
main.py
项目运行主文件,在该文件中编写神经网络代码
-
prediction.py
模型本本评估调试文件
-
path.py
数据、日志、模型的公共路径
-
requirements.txt
项目中用到的Python依赖
引入新依赖时需要准确填写
不填写版本号将默认安装最新版
参赛选手还可以查看样例项目代码详细说明
为了便于数据的管理和处理,我们官方封装了FlyAI库
FlyAI的库和其它Python库的安装方法一样,使用PIP工具安装
windows用户:pip所在路径pip.exe install -i https://pypi.flyai.com/simple flyai==0.6.6
mac和linux用户:pip所在路径/pip install -i https://pypi.flyai.com/simple flyai==0.6.4
FlyAI库的主要用途是,读取比赛数据。
使用方式如下:
#引入flyai数据下载类,DataHelper
from flyai.data_helper import DataHelper
#初始化类对象
data_helper = DataHelper()
# 根据数据ID下载训练数据
data_helper.download_from_ids("data_id xxxx")
# 二选一或者根据app.json的配置下载文件
data_helper.download_from_json()
-
main.py
每个项目的样例代码中已做简单实现,可供查考。
程序入口,编写算法,训练模型的文件。在该文件中实现自己的算法。
# -*- coding: utf-8 -*- import argparse from flyai.data_helper import DataHelper from flyai.framework import FlyAI ''' 样例代码仅供参考学习,可以自己修改实现逻辑。 模版项目下载支持(PyTorch、Tensorflow、Keras、MXNET等 第一次使用请看项目中的:FLYAI2.0框架项目详细文档.html 使用FlyAI提供的预训练模型可查看:https://www.flyai.com/models 学习资料可查看文档中心:https://doc.flyai.com/ 常见问题:https://doc.flyai.com/question.html 遇到问题不要着急,添加小姐姐微信,扫描项目里面的:FlyAI小助手二维码-小姐姐在线解答您的问题.png ''' parser = argparse.ArgumentParser() parser.add_argument("-e", "--EPOCHS", default=10, type=int, help="train epochs") parser.add_argument("-b", "--BATCH", default=32, type=int, help="batch size") args = parser.parse_args() #继承 flyai.framework 中的 FlyAI模板类 class Main(FlyAI): ''' 项目中必须继承FlyAI类,否则线上运行会报错。 ''' def download_data(self): ''' 下载数据 :return: ''' data_helper = DataHelper() # 根据数据ID下载训练数据 data_helper.download_from_ids("data_id xxxx") # 二选一或者根据app.json的配置下载文件 data_helper.download_from_json() def deal_with_data(self): ''' 处理数据,如果没有可以不实现。 :return: ''' pass def train(self): ''' 训练模型,必须实现此方法 :return: ''' pass if __name__ == '__main__': main = Main() main.download_data() main.deal_with_data() main.train()
-
prediction.py
每个项目的样例代码中已做简单实现,可供查考。
训练好模型之后可以继承
flyai.model.base
包中的base
重写下面三个方法实现模型的保存、验证和使用。# -*- coding: utf-8 -* #使用FlyAI提供的类 from flyai.framework import FlyAI #继承FlyAI实现加载模型和预测方法 class Prediction(FlyAI): def load_model(self): ''' 模型初始化,必须在此方法中加载模型 ''' pass def predict(self, **input_data): ''' 模型预测返回结果 :param input: 评估传入样例,是key-value字典类型 例如:{"user_id": 31031, "post_id": 3530, "create_post_user_id": 27617, "post_text": "心情棒棒哒"} :return: 模型预测成功返回,也是字典类型 例如:{"label": 0} ''' return 返回的例子 {"label": 0}
-
path.py
数据、日志、模型的公共路径
# -*- coding: utf-8 -* import sys import os #数据下载路径 DATA_PATH = os.path.join(sys.path[0], 'data', 'input') #模型保存路径 MODEL_PATH = os.path.join(sys.path[0], 'data', 'output', 'model')
比赛可以使用FlyAI网站上公开的与训练模型
模型查找地址:https://www.flyai.com/models
在网页中找到自己想要用的模型,之后点击“复制使用”按钮。
粘贴之后显示如下:
# 必须使用该方法下载模型,然后加载
from flyai.utils import remote_helper
# 下载到项目中的data/input/文件夹,默认会自动解压,具体文件路径可以下之后查看使用
path = remote_helper.get_remote_data('https://www.flyai.com/m/bert-base-uncased.tar.gz')
具体使用请查看预训练模型使用样例,其它高级使用方式,请选手自行查找。
def get_remote_data(remote_name, unzip=True):
"""
下载FlyAI网站上的预训练模型
:param remote_name:模型的下载地址
:param unzip: 是否解压
:return: 返回没解压的路径,具体解压位置请下载之后查看
"""
return remote.get_remote_data(remote_name, unzip)
Q:使用自己的Python环境,遇到No module name "flyai"
A:先找到使用的Python对应的pip.exe的位置
(自己电脑上可能有多个Python和pip,安装目标不要弄错。)
- windows用户在终端执行:pip所在路径pip.exe install -i https://pypi.flyai.com/simple flyai==0.6.4
- mac和linux用户在终端执行:pip所在路径/pip install -i https://pypi.flyai.com/simple flyai==0.6.4
- 其他 No module name "xxxx"问题 也可以参考上面
Q:FlyAI自带的Python环境在哪,会不会覆盖本地环境?
A:FlyAI不会覆盖本地现有的Python环境。
- windows用户:
C://Users//{你计算机用户名}//.flyai//env//python.exe
C://Users//{你计算机用户名}///.flyai//env//Scriptspip.exe
- mac和linux用户:
/Users/{你计算机用户名}/.flyai/env/bin/python3.6
/Users/{你计算机用户名}/.flyai/env/bin/pip
其它更多常见问题,请访问文档中心查看:常见问题
第一次使用需要使用微信扫码登录
杀毒软件可能会误报,点击信任该程序即可
运行flyai.exe程序,点击"本地调试"按钮,输入循环次数和数据量,点击运行即可调用main.py
如果出现 No Model Name "xxx"错误,需在 requirements.txt 填写项目依赖
如果使用本地IDE开发,需要安装“flyai”依赖并导入项目,运行main.py
运行flyai.exe程序,点击"下载数据"按钮,程序会下载60%~100%数据
项目中有新的Python包引用,必须在 requirements.txt 文件中指定包名,否则线上运行会找不到包。
不填写版本号将默认安装最新版
运行flyai.exe程序,点击"提交到GPU"按钮,输入循环次数和数据量,点击运行即可提交到GPU训练。
返回sucess状态,代表提交离线训练成功
训练结束会以微信和邮件的形式发送结果通知
运行flyai.exe程序,扫码登录之后
点击"使用jupyter调试"按钮,一键打开jupyter lab 操作界面
在jupter中运行 run main.py 命令即可在本地训练调试代码
如果出现 No Model Name "xxx"错误,需在 requirements.txt 填写项目依赖
项目中有新的Python包引用,必须在 requirements.txt 文件中指定包名,否则线上运行会找不到包。
不填写版本号将默认安装最新版
在jupyter环境下运行 ! flyai.exe train -e=10 -b=32云端GPU免费训练
返回sucess状态,代表提交离线训练成功
训练结束会以微信和邮件的形式发送结果通知
Win+R 输入cmd
首先进入到项目对应的磁盘中,然后执行
cd path\to\project
Windows用户使用 flyai.exe
执行下列命令本地安装环境并调试(第一次使用需要使用微信扫码登录)
flyai.exe test
执行test命令,会自动下载100条测试数据到项目下
如果出现 No Model Name "xxx"错误,需在 requirements.txt 填写项目依赖
如果使用本地IDE开发,可以自行安装 requirements.txt 中的依赖,运行 main.py 即可
项目中有新的Python包引用,必须在 requirements.txt 文件中指定包名,否则线上运行会找不到包。
不填写版本号将默认安装最新版
在终端下执行
flyai.exe train
返回sucess状态,代表提交离线训练成功
训练结束会以微信和邮件的形式发送结果通知
完整训练设置执行代码示例:
flyai.exe train -b=32 -e=10
通过执行训练命令,整个数据集循环10次,每次训练读取的数据量为 32 。
#####方式一:命令行调试
cd /path/to/project
Mac和Linux用户使用 ./flyai 脚本文件
授权flyai脚本
chmod +x ./flyai
执行下列命令本地安装环境并调试(第一次使用需要使用微信扫码登录)
./flyai test 注意:如果pip安装中出现 permission denied 错误,需使用sudo运行
执行test命令,会自动下载100条测试数据到项目下
如果出现 No Model Name "xxx"错误,需在 requirements.txt 填写项目依赖
如果使用本地IDE开发,可以自行安装 requirements.txt 中的依赖,运行 main.py 即可
项目中有新的Python包引用,必须在 requirements.txt 文件中指定包名,否则线上运行会找不到包。
不填写版本号将默认安装最新版
在终端下执行
./flyai train
返回sucess状态,代表提交离线训练成功
训练结束会以微信和邮件的形式发送结果通知
完整训练设置执行代码示例:
./flyai train -b=32 -e=10
通过执行训练命令,整个数据集循环10次,每次训练读取的数据量为 32 。
在终端执行命令 ./flyai ide 打开调试环境,扫码登录成功之后
在jupter中运行 run main.py 命令即可在本地训练调试代码
如果出现 No Model Name "xxx"错误,需在 requirements.txt 填写项目依赖
项目中有新的Python包引用,必须在 requirements.txt 文件中指定包名,否则线上运行会找不到包。
不填写版本号将默认安装最新版
在jupyter环境下运行 ! ./flyai train -e=10 -b=32 将代码提交到云端GPU免费训练
返回sucess状态,代表提交离线训练成功
训练结束会以微信和邮件的形式发送结果通知
flyai.exe path=xxx 可以设置自己的Python路径
flyai.exe path=flyai 恢复系统默认Pyton路径
./flyai path=xxx 可以设置自己的Python路径
./flyai path=flyai 恢复系统默认Pyton路径
from keras.applications import densenet
from flyai.utils import remote_helper
path=remote_helper.get_remote_date("https://www.flyai.com/m/v0.8|densenet169_weights_tf_dim_ordering_tf_kernels_notop.h5")
densenet_notop = densenet.DenseNet169(include_top=False, weights=None)
densenet_notop.load_weights(path)
# densenet_notop = densenet.DenseNet169(include_top=False, weights='imagenet')
# 这行代码与上面等同,只不过一个是调用FlyAI提供的预训练模型地址,一个是外网的地址
x = densenet_notop.output
x = GlobalAveragePooling2D()(x)
x = Dense(2048, activation='relu')(x)
predictions = Dense(200, activation='softmax')(x)
model = Model(inputs=densenet_notop.input, outputs=predictions)
model.compile(...)
model.fit_generator(...)
import torchvision
from flyai.utils import remote_helper
path=remote_helper.get_remote_date("https://www.flyai.com/m/resnet50-19c8e357.pth")
model = torchvision.models.resnet50(pretrained = False)
# model = torchvision.models.resnet50(pretrained = True)
# 这行代码与上面等同,只不过一个是调用FlyAI提供的预训练模型地址,一个是外网的地址
model.load_state_dict(torch.load(path)
# 将其中的层直接替换为我们需要的层即可
model.fc = nn.Linear(2048,200)
import tensorflow as tf
import bert.modeling as modeling
# 必须使用该方法下载模型,然后加载
from flyai.utils import remote_helper
path = remote_helper.get_remote_date('https://www.flyai.com/m/uncased_L-12_H-768_A-12.zip')
print('path:', path)
data_root = os.path.splitext(path)[0]
print('data_root:', data_root)
# 解析link解压后的路径
data_root = os.path.splitext(path)[0]
# 【注意】使用改路径前首先确认是否和预训练model下载解压路径是否一致
print('data_root:', data_root)
# 使用当前路径
# 预训练model路径存放地址和link解析路径不一致时使用下面方法直接指定】
# data_root = os.path.join(os.path.curdir, 'data/input/XXXX/XXXXX')
bert_config_file = os.path.join(data_root, 'bert_config.json')
bert_config = modeling.BertConfig.from_json_file(bert_config_file)
init_checkpoint = os.path.join(data_root, 'bert_model.ckpt')
bert_vocab_file = os.path.join(data_root, 'vocab.txt')
扫描下方二维码,及时获取FlyAI最新消息,抢先体验最新功能。