将模式识别项目迁移至NAIE(一)-模型训练
文章首发及后续更新:https://mwhls.top/2260.html新的更新内容请到mwhls.top查看。无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。目录1. NAIE模型训练服务2. NAIE工作流程3. 代码修改4. main.py5. requirements.txt NAIE模型训练服务训练服务页面:https://console.huaweicloud.com/n
·
文章首发及后续更新:https://mwhls.top/2260.html
新的更新内容请到mwhls.top查看。
无图/无目录/格式错误/更多相关请到上方的文章首发页面查看。
NAIE模型训练服务
- 训练服务页面:https://console.huaweicloud.com/naie/products/mts
- 官方流程演示:https://console.huaweicloud.com/TrainConsoleService/?region=cn-north-4&use_scene=experience&locale=zh-cn#/homepage/hpindex
- 官方文档:https://support.huaweicloud.com/usermanual-naie-model-training/naie_model_training_02_0001.html
NAIE工作流程
- 导入数据集
- 创建模型训练
- 创建开发环境并等待开发环境创建完成。
- 进入创建好的开发环境,见图1
- 安装所需库
- 打开requirements.txt,加入所需库。
- 如,需要使用sklearn库,且不指定版本,则直接加入一行
sklearn
即可。 - 见下方标题-requirements.txt
- 引入代码
- 复制粘贴,或者左上角添加文件。
- 名称无要求,后面可以自己选执行文件。
- 它自带了一个
模型训练名称.py
的文件(此处为example_name.py),提供了大致框架,可以直接将自己的代码复制进这里,或者留着它用作参考。
- 代码修改
- 数据集路径修改。
- 训练日志生成。
- 具体修改见标题-代码修改
- 训练模型
- 修改好代码后,点击训练模型,选择好主入口及AI引擎后即可开始训练,见图2。
- 点击训练任务,训练完成后,可以查看运行日志及训练报告,见图3。
- 模型验证
- 模型验证见:将模式识别项目迁移至NAIE(二)-模型验证
代码修改
- 数据集路径修改:
- 原来的数据集路径用的是本地路径,这里需要调用NAIE里的get_data_reference来获取其在服务器的路径,来代替之前读取数据集的路径。
- 代码:
from naie.datasets import get_data_reference
data_path = get_data_reference(dataset="数据集所在文件夹名称", dataset_entity="数据集文件名")[0]
- 注:
get_data_reference
函数返回的是列表,所以要取[0]
- 训练日志生成:
- 也可以不用,直接print输出也行,但我纠结这个纠结挺久的,所以还是得讲讲。
- 这里是模板里面的
score_model()
函数。 - 一次的
report(True)
可以用多行的log_property()
来添加日志,但如果再次调用report(True)
就会覆盖掉上次的日志。 - 所以代码里的日志我是在
report(True)
里面循环添加日志,而不是在外面。 - 代码:
from __future__ import print_function # do not delete this line if you want to save your log file.这个引入是模板自带的,不是日志函数要求的,但因为它注释说是和log有关的,所以加在这里
。from naie.metrics import report
with report(True) as log_report:
log_report.log_property("效果名称", accuracy_score(y_validation, model.predict(x_validation)))
- 注:accuracy_score(y_validation, model.predict(x_validation))是返回模型预测效果的,我只试过返回浮点数的,没试过其他类型。
main.py
- 修改前原代码见:LDA与QDA分类数据的简单应用(python)
- 原代码及其数据集下载:https://mwhls.lanzous.com/idyI5opjp5i
- 为了简化代码,只用了letter数据集来训练,其余三个数据集删除了。
- 除头文件外,新增的地方用!!来标识,总共三个。
- 以及将原本放在外面执行的主函数,改成放在__main__里了。
# -*- coding: utf-8 -*-
from __future__ import print_function # do not delete this line if you want to save your log file.
import numpy as np
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA, QuadraticDiscriminantAnalysis as QDA
from naie.datasets import get_data_reference
from naie.metrics import report
'''
代码框架见QDA.py,大致是 加载数据,模型训练,测试集预测,日志上传四个部分。
这里补上了日志上传的代码,即score_model()
'''
def get_list_letter(char, features, path):
#数据集处理部分
with open(path, 'r') as letter_train:
content_letter_train = letter_train.readlines()
for line in content_letter_train:
temp = line.split(',')
temp[-1] = list(temp[-1])[0]
char.append(temp[0])
features.append((temp[1::]))
def convert_int(str_list):
#数据集处理部分
for row in range(0, len(str_list)):
for col in range(0, len(str_list[row])):
str_list[row][col] = int(str_list[row][col])
def convert_float(str_list):
#数据集处理部分
for row in range(0, len(str_list)):
for col in range(0, len(str_list[row])):
str_list[row][col] = float(str_list[row][col])
def train_and_test(train_result, fetures_list, test_list, analysis_method):
#调用sklearn进行训练及预测
letter_x = np.array(fetures_list)
letter_y = np.array(train_result)
if analysis_method == "LDA":
clf = LDA()
elif analysis_method == "QDA":
clf = QDA()
else:
print("错误的分类方法名。")
return -1
clf.fit(letter_x, letter_y)
return list(clf.predict(test_list))
def analysis_accuracy(judge_result, test_char):
#分析预测精确度
sum = 0
right_num = 0
for pos in range(0, len(judge_result)):
sum += 1
if judge_result[pos] == test_char[pos]:
right_num += 1
return right_num / sum
def score_model(method_list, accuracy_list):
# !!日志生成函数
#NAIE官方模板,用于给出报告,下面的注释就是示例。
score = {}
for i in range(0, len(method_list)):
score[method_list[i]] = accuracy_list[i]
with report(True) as log_report:
for method, score in score.items():
log_report.log_property(method, score)
"""
====================== YOUR CODE HERE ======================
there are several api you can use here.
Example:
from naie.metrics import report
with report(True) as log_report:
log_report.log_property("score", accuracy_score(y_validation, model.predict(x_validation)))
============================================================
"""
return score
def main():
# letter数据集初始化
# !!这里的路径获取改了
letter_train_path = get_data_reference(dataset="Default", dataset_entity="letter_train").get_files_paths()[0]
letter_train_class = []
letter_train_features = []
letter_test_path = get_data_reference(dataset="Default", dataset_entity="letter_test").get_files_paths()[0]
#下面注释掉的是用来测试数据集如何导入的。
# print()
# print(type(letter_train_path))
# print()
# print(letter_train_path)
# print()
letter_test_class = []
letter_test_features = []
get_list_letter(letter_train_class, letter_train_features, letter_train_path)
get_list_letter(letter_test_class, letter_test_features, letter_test_path)
convert_int(letter_train_features)
convert_int(letter_test_features)
# Letter数据集学习
letter_LDA_judge_result = train_and_test(letter_train_class, letter_train_features, letter_test_features, "LDA")
letter_LDA_judge_accuracy = analysis_accuracy(letter_LDA_judge_result, letter_test_class)
print('使用LDA对letter的', len(letter_train_features), '份数据学习后,对',
len(letter_test_features), '份测试数据分类的准确率为:', letter_LDA_judge_accuracy)
letter_QDA_judge_result = train_and_test(letter_train_class, letter_train_features, letter_test_features, "QDA")
letter_QDA_judge_accuracy = analysis_accuracy(letter_QDA_judge_result, letter_test_class)
print('使用QDA对letter的', len(letter_train_features), '份数据学习后,对',
len(letter_test_features), '份测试数据分类的准确率为:', letter_QDA_judge_accuracy)
# !!增加了日志生成
method_list = ['LDA', 'QDA']
score_list = [letter_LDA_judge_accuracy, letter_QDA_judge_accuracy]
score = score_model(method_list, score_list)
return score
if __name__ == "__main__":
main()
requirements.txt
#name [condition] [version]
#condition ==, >=, <=, >, <
#tensorflow==1.8.1
naie
scikit-learn
numpy
更多推荐
已为社区贡献2条内容
所有评论(0)