内存不足使用深度学习文本数据进行分类
这个例子展示了如何将内存不足与深入学习网络文本数据使用一个转换数据存储。
改变了数据存储转换或过程从底层数据存储读取数据。您可以使用一个转换数据存储的培训、验证、测试和预测深度学习应用程序的数据集。使用转换数据存储读取内存不足数据或执行特定的预处理操作,当阅读批次的数据。
当训练网络,软件创建mini-batches序列长度相同的填充,删除,或分割输入数据。的trainingOptions
函数提供了选项板和截断输入序列,然而,这些选项并不是适合的词序列向量。此外,该函数不支持填充一个自定义数据存储中的数据。金宝app相反,您必须手动垫和截断序列。如果你left-pad和截断的词序列向量,然后训练可能会提高。
的使用深度学习分类文本数据例子手动和垫的所有文档进行截断长度相同。这一过程增加了很多填充非常短的文件和丢弃大量的数据从很长的文件。
另外,为了防止添加过多的填充或丢弃太多数据,创建一个数据存储,输入mini-batches转变成网络。这个示例中创建的数据存储转换mini-batches文档序列或词指数和left-pads每个mini-batch mini-batch长度最长的文档。
负载Pretrained字嵌入
数据存储要求一个字嵌入文档转换成向量序列。加载一个pretrained字嵌入使用fastTextWordEmbedding
。这个函数需要文本分析工具箱™模型160亿年fastText英语嵌入标记词金宝app支持包。如果这种支持包没金宝app有安装,那么函数提供一个下载链接。
emb = fastTextWordEmbedding;
加载数据
创建一个表格文本数据的数据存储factoryReports.csv
。指定阅读的数据“描述”
和“类别”
只列。
filenameTrain =“factoryReports.csv”;textName =“描述”;labelName =“类别”;ttdsTrain = tabularTextDatastore (filenameTrain,“SelectedVariableNames”,(textName labelName]);
查看预览的数据存储。
预览(ttdsTrain)
ans =8×2表描述类别_______________________________________________________________________ ______________________{的物品是偶尔陷入扫描仪线轴。'}{“机械故障”}{”大声作响,声音是来自汇编活塞。'}{“机械故障”}{有削减权力时开始。'}{“电子失败”}{“炸电容器在汇编程序。'}{“电子失败”}{”融合机跳闸。'}{“电子失败”}{的破裂管道建设代理喷洒冷却剂。'}{“泄漏”}{混合器的保险丝吹。'}{“电子失败”}{事情继续下跌的腰带。'}{}“机械故障”
变换数据存储
创建一个自定义转换函数将数据从数据存储读取转换为表包含预测和响应。的transformText
函数读取的数据tabularTextDatastore
对象,并返回一个表的预测和响应。预测是C——- - - - - -年代数组的词向量“嵌入”这个词循证
,在那里C嵌入维度和吗年代是序列长度。类反应分类标签。
类名,从训练数据读取标签使用readLabels
函数,列出和结束的例子,找到独特的类名。
标签= readLabels (ttdsTrain labelName);一会=独特(标签);numObservations =元素个数(标签);
因为表格文本数据存储在一个读取的数据可以读取多行,您可以处理一个完整mini-batch数据的变换函数。确保流程的完整mini-batch数据变换函数,设置阅读表格文本数据存储到mini-batch规模大小将用于培训。
miniBatchSize = 64;ttdsTrain。ReadSize = miniBatchSize;
转换表的输出文本数据为训练序列,将使用的数据存储变换
函数。
tdsTrain =变换(ttdsTrain @(数据)transformText(数据、emb一会))
tdsTrain = TransformedDatastore属性:UnderlyingDatastore:(1×1 matlab.io.datastore。TabularTextDatastore] 金宝appSupportedOutputFormats(“三种”:“csv”“xlsx”“xls”“铺”“parq”“png”“jpg”“jpeg”“tif”“tiff”“wav”“flac”“ogg”“mp4”“m4a格式)转换:{@(数据)transformText(数据、emb一会)}IncludeInfo: 0
预览转换后的数据存储。预测是C——- - - - - -年代数组,年代序列长度和吗C是功能的数量(嵌入维数)。分类标签的响应。
预览(tdsTrain)
ans =8×2表预测反应售予_____________{300×11单}机械故障{300×11单}机械故障{300×11单}电子故障{300×11单}电子失败{300×11单}电子{300×11单}电子故障泄漏{300×11单}{300×11单}机械故障
创建和火车LSTM网络
定义LSTM网络体系结构。序列数据输入网络,包括序列输入层和设置输入大小嵌入维度。接下来,包括一个LSTM隐藏层180单元。使用LSTM层sequence-to-label分类问题,设置输出模式“最后一次”
。最后,添加一个完全连接层与输出尺寸等于类的数量,softmax层和一层分类。
numFeatures = emb.Dimension;numHiddenUnits = 180;numClasses =元素个数(类名);层= […sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”,“最后一次”)fullyConnectedLayer (numClasses) softmaxLayer classificationLayer];
指定培训选项。指定的能手“亚当”
和梯度阈值是2。数据存储不支持洗牌,所以设置金宝app“洗牌”
,“永远”
。验证每个时代网络一次。监控培训进展,设置“阴谋”
选项“训练进步”
。抑制详细输出,集“详细”
来假
。
默认情况下,trainNetwork
使用GPU如果一个是可用的。手动指定执行环境,使用“ExecutionEnvironment”
名称-值对的观点trainingOptions
。培训在CPU可以显著长于GPU。培训使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)。
numIterationsPerEpoch =地板(numObservations / miniBatchSize);选择= trainingOptions (“亚当”,…“MaxEpochs”15岁的…“MiniBatchSize”miniBatchSize,…“GradientThreshold”2,…“洗牌”,“永远”,…“阴谋”,“训练进步”,…“详细”、假);
火车LSTM网络使用trainNetwork
函数。
网= trainNetwork (tdsTrain层,选项);
预测使用新数据
三个新报告的事件类型进行分类。创建一个字符串数组,其中包含新报告。
reportsNew = […“冷却池下面分选机。”“在启动分选机把保险丝烧断了。”“有一些非常响亮的哒哒声来自汇编程序。”];
预处理文本数据使用的预处理步骤作为培训文档。
documentsNew = preprocessText (reportsNew);
将文本数据转换为序列嵌入向量使用doc2sequence
。
documentsNew XNew = doc2sequence (emb);
使用训练LSTM网络分类的新序列。
XNew labelsNew =分类(净)
labelsNew =3×1分类泄漏电子机械失败
文本转换功能
的transformText
函数读取的数据tabularTextDatastore
对象,并返回一个表的预测和响应。预测是C——- - - - - -年代数组的词向量“嵌入”这个词循证
,在那里C嵌入维度和吗年代是序列长度。类反应分类标签一会
。
函数dataTransformed = transformText(数据、emb类名)%预处理文件。数据textData = {: 1};文件= preprocessText (textData);%转换为序列。预测= doc2sequence (emb、文档);%阅读标签。数据标签= {:2};反应=分类(标签、类名);%将数据转换成表。dataTransformed =表(预测、反应);结束
预处理功能
这个函数preprocessText
执行以下步骤:
在标记文本使用
tokenizedDocument
。将文本转换为小写
较低的
。删除标点符号使用
erasePunctuation
。
函数文件= preprocessText (textData)文件= tokenizedDocument (textData);文件=低(文件);= erasePunctuation文件(文档);结束
阅读标签功能
的readLabels
函数创建的一个副本tabularTextDatastore
对象运输大亨
和读取的标签labelName
列。
函数标签= readLabels(运输大亨,labelName) ttdsNew =(运输大亨)复印件;ttdsNew。年代electedVariableNames = labelName; tbl = readall(ttdsNew); labels = tbl.(labelName);结束
另请参阅
fastTextWordEmbedding
|wordEmbeddingLayer
|doc2sequence
|tokenizedDocument
|lstmLayer
(深度学习工具箱)|trainNetwork
(深度学习工具箱)|trainingOptions
(深度学习工具箱)|sequenceInputLayer
(深度学习工具箱)|变换
相关的话题
- 创建简单的文本分类模型
- 使用主题模型分析文本数据
- 使用多字短语分析文本数据
- 训练情绪分类器
- 使用深度学习序列分类(深度学习工具箱)
- 深度学习在MATLAB(深度学习工具箱)