使用自定义小批量数据存储对内存不足的文本数据进行分类
这个示例展示了如何使用自定义的迷你批处理数据存储对深度学习网络中的内存不足文本数据进行分类。
小批量数据存储是支持批量读取数据的数据存储的实现。您可以使用小批数据存储作为深度学习应用程序的训练、验证、测试和预测数据集的来源。使用小批量数据存储来读取内存不足的数据,或者在读取批量数据时执行特定的预处理操作。
当训练网络时,软件通过填充、截断或分割输入数据来创建相同长度的小批量序列。的trainingOptions
函数提供填充和截断输入序列的选项,但是,这些选项不太适合字向量序列。此外,该函数不支持在自定义数据存储中填充数据。相反,您必须手动填充和截断序列。如果你left-pad并截断词向量序列,可以提高训练效果。
的使用深度学习分类文本数据手动截断所有文档并将其填充为相同的长度。这个过程为非常短的文档添加了大量填充,并丢弃了非常长的文档中的大量数据。
或者,为了防止添加过多的填充或丢弃过多的数据,可以创建一个自定义的迷你批数据存储,将迷你批输入到网络中。自定义迷你批数据存储textDatastore.m
将小批文档转换为序列或单词索引,并将每个小批左补为小批中最长文档的长度。对于已排序的数据,此数据存储可以帮助减少添加到数据中的填充量,因为文档没有填充到固定长度。类似地,数据存储不会丢弃文档中的任何数据。
本例使用自定义迷你批数据存储textDatastore
,作为支持文件附在本例中。要访问此文件,请将示例作为活动脚本打开。您可以通过自定义函数使此数据存储适应您的数据。有关显示如何创建自己的自定义小批数据存储的示例,请参见开发自定义小批量数据存储(深度学习工具箱).
加载预训练词嵌入
数据存储textDatastore
需要字嵌入来将文档转换为向量序列。加载一个预训练的词嵌入使用fastTextWordEmbedding
.此功能需要文本分析工具箱™模型快速文本英语160亿令牌词嵌入支持包。如果没有安装此支持包,则该函数将提供下载链接。
emb = fasttextwordem寝料;
创建文档的迷你批量数据存储
创建一个包含训练数据的数据存储。自定义迷你批数据存储textDatastore
从CSV文件中读取预测符和标签。对于预测器,数据存储将文档转换为单词索引序列,对于响应,数据存储为每个文档返回一个分类标签。有关创建自定义小批数据存储的详细信息,请参见开发自定义小批量数据存储(深度学习工具箱).
培训数据请指定CSV文件“factoryReports.csv”
文本和标签都在列中“描述”
和“类别”
分别。
filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;dsTrain = textDatastore(文件名,textName,labelName,emb)
dsTrain =带有属性的textDatastore: ClassNames:["电子故障" "泄漏" "机械故障" "软件故障"]数据存储:[1×1 matlab.io.datastore.]transformdatastore] EmbeddingDimension: 300 LabelName:“Category”MiniBatchSize: 128 NumClasses: 4 NumObservations: 480
创建并训练LSTM网络
定义LSTM网络体系结构。为了将序列数据输入到网络中,包括一个序列输入层,并将输入大小设置为嵌入维数。接下来,包含一个包含180个隐藏单元的LSTM层。若要将LSTM层用于从序列到标签的分类问题,请将输出模式设置为“最后一次”
.最后,添加一个输出大小等于类数量的全连接层、一个softmax层和一个分类层。
numFeatures = dsTrain.EmbeddingDimension;numHiddenUnits = 180;numClasses = dsTrain.NumClasses;层= […sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
指定培训选项。指定要的求解器“亚当”
梯度阈值为2。数据存储textDatastore.m
不支持洗牌,所以定“洗牌”
,“永远”
.有关显示如何实现支持变换的数据存储的示例,请参见开发自定义小批量数据存储(深度学习工具箱).若要监控培训进度,可设置“阴谋”
选项“训练进步”
.若要抑制详细输出,请设置“详细”
来假
.
默认情况下,trainNetwork
使用GPU(如果有的话)。若要手动指定执行环境,请使用“ExecutionEnvironment”
的名称-值对参数trainingOptions
.在CPU上进行训练比在GPU上进行训练花费的时间要长得多。使用GPU进行训练需要并行计算工具箱™和受支持的GPU设备。有关受支持设备的信息,请参见GPU计算要求(并行计算工具箱).
miniBatchSize = 128;numObservations = dsTrain.NumObservations;numIterationsPerEpoch = floor(numObservations / miniBatchSize);选项= trainingOptions(“亚当”,…“MiniBatchSize”miniBatchSize,…“GradientThreshold”2,…“洗牌”,“永远”,…“阴谋”,“训练进步”,…“详细”、假);
对LSTM网络进行训练trainNetwork
函数。
net = trainNetwork(dsTrain,layers,options);
使用新数据进行预测
对三个新报告的事件类型进行分类。创建包含新报告的字符串数组。
reportsNew = [“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];
使用预处理步骤作为数据存储对文本数据进行预处理textDatastore
.
documents = tokenizedDocument(reportsNew);文档=较低(文档);documents = eraspunctuation(文档);Predictors = doc2sequence(emb,documents);
利用训练好的LSTM网络对新序列进行分类。
labelsNew =分类(net,predictors)
labelsNew =3×1分类泄漏电子故障机械故障
另请参阅
wordEmbeddingLayer
|doc2sequence
|tokenizedDocument
|lstmLayer
(深度学习工具箱)|trainNetwork
(深度学习工具箱)|trainingOptions
(深度学习工具箱)|sequenceInputLayer
(深度学习工具箱)|wordcloud
|extractHTMLText
|findElement
|htmlTree
相关的话题
- 使用深度学习生成文本(深度学习工具箱)
- 创建简单的文本分类模型
- 使用主题模型分析文本数据
- 使用多词短语分析文本数据
- 训练一个情感分类器
- 使用深度学习的序列分类(深度学习工具箱)
- MATLAB深度学习(深度学习工具箱)