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