这个例子展示了如何使用深度学习网络使用自定义的迷你批处理数据存储对内存不足的文本数据进行分类。
迷你批处理数据存储是数据存储的实现,支持批量读取数据。金宝app您可以使用迷你批处理数据存储作为深度学习应用程序的培训,验证,测试和预测数据集来源。使用迷你批量数据存储读取内存数据或在阅读数据批次时执行特定的预处理操作。
在培训网络时,软件通过填充,截断或分割输入数据创建相同长度的逐个序列。这trainingOptions
功能为填充和截断输入序列提供选项,但是这些选项不太适用于单词向量的序列。此外,此功能不支持自定义数据存储中的填充数据。金宝app相反,您必须手动填充并截断序列。如果你left-pad并对词向量序列进行截断,可以提高训练效果。
这使用深度学习对文本数据进行分类示例手动截断和填充所有文档到相同的长度。这个过程为非常短的文档添加了大量填充,并丢弃了来自非常长的文档的大量数据。
或者,为了防止添加过多的填充或丢弃太多数据,创建一个自定义迷你批量数据存储,该数据存储将Mini-Batches输入到网络中。自定义迷你批处理数据存储textDatastore.m
将Mini-Batch的文档转换为序列或单词指数,然后将每个迷你批处理到迷你批次中最长文档的长度。对于排序数据,此数据存储可能有助于减少添加到数据的填充量,因为文档未填充到固定长度。同样,数据存储区不会丢弃文档中的任何数据。
此示例使用自定义迷你批处理数据存储textDatastore
,作为支持文件附加到本示例中。金宝app要访问该文件,请将示例作为一个活动脚本打开。您可以通过自定义函数使该数据存储适应您的数据。有关如何创建自己的自定义迷你批处理数据存储的示例,请参见开发自定义小批量数据存储(深度学习工具箱).
数据存储textDatastore
需要单词嵌入来将文档转换为向量序列。加载一个预先训练的词嵌入使用fastTextWordEmbedding
.此功能需要文本分析工具箱™模型对于FastText英语160亿令牌字嵌入金宝app支持包。如果未安装此支持金宝app包,则该函数提供了下载链接。
emb = fastTextWordEmbedding;
创建一个包含培训数据的数据存储。自定义迷你批处理数据存储textDatastore
从CSV文件中读取预测器和标签。对于预测器,数据存储区将文档转换为单词索引和响应的序列,数据存储返回每个文档的分类标签。有关创建自定义迷你批处理数据存储的详细信息,请参阅开发自定义小批量数据存储(深度学习工具箱).
对于培训数据,请指定CSV文件“factoryReports.csv”
并且该文本和标签位于列中“描述”
和“类别”
分别。
Filenametrain =.“factoryReports.csv”;textName =“描述”;labelName =“类别”;dstrain = textdataStore(filenametrain,textname,labelname,mem)
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(numhidentunits,“OutputMode”那'最后的')全连接列(numclasses)softmaxlayer分类层];
指定培训选项。指定求解器'亚当'
和渐变阈值为2.数据存储textDatastore.m
不支持洗牌,所以设金宝app置“洗牌”
,'绝不'
.有关如何实现支持变换的数据存储的示例,请参见金宝app开发自定义小批量数据存储(深度学习工具箱).为了监控训练进度,设置'plots'
选项'培训 - 进步'
.要抑制详细输出,请设置“详细”
到假
.
默认情况下,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,......“洗牌”那'绝不'那......'plots'那'培训 - 进步'那......“详细”、假);
使用该网络训练LSTM网络trainNetwork
功能。
网= trainNetwork (dsTrain层,选项);
对三个新报告的事件类型进行分类。创建包含新报告的字符串数组。
reportsNew = [“冷却剂在分拣机下面汇集。”“分类器在启动时烧断保险丝。”“从组装器里传出很响的咔哒声。”];
使用预处理步骤作为数据存储的预处理预处理文本数据textDatastore
.
文档= tokenizeddocument(eportsnew);文件=较低(文件);文件=侵蚀(文件);预测器= doc2sequence(mem,文件);
用训练好的LSTM网络对新的序列进行分类。
Labelsnew =分类(网络,预测器)
Labelsnew =3×1分类泄漏电子故障机械故障
wordEmbeddingLayer
|doc2sequence
|tokenizedDocument
|lstmLayer
(深度学习工具箱)|trainNetwork
(深度学习工具箱)|trainingOptions
(深度学习工具箱)|sequenceInputlayer.
(深度学习工具箱)|WordCloud.
|extracthtmltext.
|findElement
|htmltree.