这个例子展示了如何使用深度学习网络使用自定义的迷你批处理数据存储对内存不足的文本数据进行分类。
迷你批处理数据存储是支持批量读取数据的数据存储的实现。金宝app您可以使用小批量数据存储作为深度学习应用程序的训练、验证、测试和预测数据集的来源。使用小批量数据存储读取内存不足的数据或在读取批量数据时执行特定的预处理操作。
在训练网络时,该软件通过填充、截断或分割输入数据来创建具有相同长度的小批量序列。的trainingOptions
函数提供了填充和截断输入序列的选项,但是,这些选项不适用于单词向量序列。此外,该函数不支持填充自定义数据存储中的数据。金宝app相反,您必须手动填充和截断序列。如果你left-pad并对词向量序列进行截断,可以提高训练效果。
的使用深度学习对文本数据进行分类示例手动截断和填充所有文档到相同的长度。这个过程为非常短的文档添加了大量填充,并丢弃了来自非常长的文档的大量数据。
另外,为了防止添加过多的填充或丢弃过多的数据,可以创建一个自定义的迷你批处理数据存储,它将迷你批处理输入到网络中。自定义的小批量数据存储textDatastore.m
将文档的小批转换为序列或字索引,并将每个小批中的左填充符转换为小批中最长文档的长度。对于已排序的数据,该数据存储可以帮助减少添加到数据中的填充量,因为文档不会被填充到固定长度。类似地,数据存储不会丢弃文档中的任何数据。
本示例使用自定义的迷你批处理数据存储textDatastore
,作为支持文件附加到本示例中。金宝app要访问该文件,请将示例作为一个活动脚本打开。您可以通过自定义函数使该数据存储适应您的数据。有关如何创建自己的自定义迷你批处理数据存储的示例,请参见开发自定义小批量数据存储(深度学习工具箱).
数据存储textDatastore
需要单词嵌入来将文档转换为向量序列。加载一个预先训练的词嵌入使用fastTextWordEmbedding
.此功能需要文本分析工具箱™模型用于快速文本英语160亿令牌词嵌入金宝app支持包。如果没有安装此支金宝app持包,则该函数将提供下载链接。
emb = fastTextWordEmbedding;
创建一个包含培训数据的数据存储。自定义的小批量数据存储textDatastore
从CSV文件中读取预测器和标签。对于预测器,数据存储将文档转换为单词索引序列,对于响应,数据存储为每个文档返回一个分类标签。有关创建自定义小批量数据存储的详细信息,请参见开发自定义小批量数据存储(深度学习工具箱).
对于培训数据,指定CSV文件“factoryReports.csv”
文本和标签都在列中“描述”
和“类别”
分别。
filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;dsTrain = textDatastore (filenameTrain textName、labelName emb)
dsTrain = textDatastore with properties: ClassNames: ["Electronic Failure" "Leak" "Mechanical Failure" "Software Failure"]TransformedDatastore] embedingdimension: 300 LabelName:“类别”MiniBatchSize: 128 NumClasses: 4 nummobservations: 480
定义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
不支持洗牌,所以设金宝app置“洗牌”
,“永远”
.有关如何实现支持变换的数据存储的示例,请参见金宝app开发自定义小批量数据存储(深度学习工具箱).为了监控训练进度,设置“阴谋”
选项“训练进步”
.要抑制verbose输出,请设置“详细”
来假
.
默认情况下,trainNetwork
如果GPU可用,则使用GPU。要手动指定执行环境,请使用“ExecutionEnvironment”
的名称-值对参数trainingOptions
.在CPU上进行训练所花费的时间要比在GPU上花费的时间长得多。使用GPU的培训需要并行计算工具箱™和支持的GPU设备。金宝app有关支持的设备的信息,请参见金宝appGPU支金宝app持情况(并行计算工具箱).
miniBatchSize = 128;numObservations = dsTrain.NumObservations;numIterationsPerEpoch = floor(nummobations / 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