转载地址:https://bbs.huaweicloud.com/forum/thread-144358-1-1.html
作者:李响
邮箱:chaojililin@163.com
基于MindSpore1.3.0的文本分类迁移学习
本人基于MindSpore1.3.0版本开发文本分类迁移学习(下面是关键步骤的解释说明,具体代码见附件)
导入模块:
import argparse import os import os.path import time import numpy as np import json import tools import preprocess import postprocess import datetime import submodel from mindspore import Tensor from automl import EarlyStopValAcc, BestAccSaver, TrainAccUpdater, ValControl import mindspore.dataset as ds from mindspore.train.callback import Callback from mindspore.train.serialization import save_checkpoint import english_tokentool from mindspore.train.serialization import export
数据集准备:
自建一个目录text作为根目录,再建一个若干个子目录作为一级目录(sport、education、fashion、superstar、politic、diet),具体目录结构如下,一级目录下存储是具体的txt文本信息
text----sport
----education
----fashion
----superstar
----politic
----diet
读取数据到内存:
preprocess.create_data_lists(FLAGS.data_dir, # 训练数据地址 FLAGS.testing_percentage, # 分割的测试数据集的比列 FLAGS.validation_percentage, # 分割的验证数据集的比列 file_format, # 文件格式 FLAGS.three_parts) # 是否需要test数据集 preprocess.update_fix_length() preprocess.check_input_data() # 校验读取到的数据是否正常, 如果不正常好抛出异常 preprocess.cache_train_data() # 缓存训练数据 submodel.add_sample_inf_to_cache_in_memory() # 将采样信息加入到缓存中,方便后续进行采样
数据集训练:
train_samples, train_ground_truth = submodel.get_random_data_from_cache_memory(-1, 'training') train_x, train_y = np.transpose(np.array(train_samples).astype("float32"), axes=[0, 2, 1]), np.array( train_ground_truth).astype("float32") train_data_set = TTDataset(train_x, train_y) train_data_set = ds.GeneratorDataset(train_data_set, column_names=["text", "label"], shuffle=True) train_data_set = train_data_set.batch(FLAGS.batch_size, drop_remainder=True) dataset_size = train_data_set.get_dataset_size() FLAGS.dataset_size = dataset_size print(dataset_size)
数据集验证;
validation_dataset_name = 'validation' if FLAGS.three_parts else 'testing' validation_samples, validation_ground_truth = submodel.get_random_data_from_cache_memory(-1, validation_dataset_name) valid_x, valid_y = np.transpose(np.array(validation_samples).astype("float32"), axes=[0, 2, 1]), np.array( validation_ground_truth).astype("float32")
定义网络:
# model network, model, optim = submodel.add_final_training_ops_CNN()
转为MindIR:
# 转化为mindir格式 input_np = np.random.uniform(0.0, 1.0, size=[1, 128, FLAGS.fix_length]).astype(np.float32) export(network, Tensor(input_np), file_name="./modeloutput/text_mobilenet", file_format='MINDIR') command = r'call modelConvertMindspore\converter_lite.exe --fmk=MINDIR --modelFile=' + './modeloutput/text_mobilenet.mindir' + ' --outputFile=' + './modeloutput/text_mobilenet' os.system(command)