主要内容

사용자지정미니배치데이터저장소를사용하여메모리에담을수없는큰텍스트데이터분류하기

이예제에서는사용자지정미니배치데이터저장소를사용하여딥러닝신경망으로메모리에담을수없는큰텍스트데이터를분류하는방법을보여줍니다。

미니배치데이터저장소란배치단위로데이터를읽을수있는데이터저장소를구현한것입니다。미니배치데이터저장소는딥러닝응용프로그램을위한훈련,검증,테스트및예측데이터세트의소스로사용할수있습니다。미니배치데이터저장소를사용하여메모리에다담을수없을정도로큰데이터를읽어들이거나,데이터를배치단위로읽을때특정전처리연산을수행할수있습니다。

신경망을훈련시킬때입력데이터를채우거나자르거나분할하여동일한길이의시퀀스로구성된미니배치를만듭니다。trainingOptions함수는입력시퀀스를채우고자르는옵션을제공합니다。그러나이러한옵션은단어벡터로구성된시퀀스에적합하지않습니다。뿐만아니라이함수는사용자지정데이터저장소의데이터를채우는것을지원하지않습니다。따라서시퀀스를수동으로채우고잘라야합니다。단어벡터로구성된시퀀스를왼쪽을채우고자르면훈련이향상될수있습니다。

딥러닝을사용하여텍스트데이터분류하기예제에서는모든문서가동일한길이가되도록수동으로자르고채우는방법을설명합니다。이과정은매우짧은문서에다량의채우기를추가하고매우긴문서에서다량의데이터를버립니다。

또는다량의채우기를추가하거나다량의데이터가버려지지않도록하려면신경망에미니배치를입력하는사용자지정미니배치데이터저장소를만드십시오。사용자지정미니배치데이터저장소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계층을사용하려면출력모드를“最后一次”로설정하십시오。마지막으로,출력크기가클래스개수와같은완전연결계층,소프트맥스계층,분류계층을추가합니다。

numFeatures = dsTrain.EmbeddingDimension;numHiddenUnits = 180;numClasses = dsTrain.NumClasses;层= [...sequenceInputLayer numFeatures lstmLayer (numHiddenUnits,“OutputMode”“最后一次”) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];

훈련옵션을지정합니다。솔버를“亚当”으로지정하고기울기임계값을2로지정합니다。데이터저장소textDatastore.m은섞기를지원하지않으므로“洗牌”“永远”로설정합니다。섞기가지원되는데이터저장소를구현하는방법에대한예제는开发自定义小批量数据存储(深度学习工具箱)항목을참조하십시오。훈련진행상황을모니터링하려면“阴谋”옵션을“训练进步”로설정하십시오。세부정보가출력되지않도록하려면“详细”로설정하십시오。

기본적으로trainNetwork는gpu를사용할수있으면gpu를사용합니다。실행환경을수동으로지정하려면trainingOptions“ExecutionEnvironment”이름-값쌍通讯录수를사용하십시오。CPU에서훈련시키면GPU에서훈련시키는것보다시간이상당히오래걸릴수있습니다。GPU를사용하여훈련시키려면并行计算工具箱™와지원되는GPU장치가필요합니다。지원되는장치에대한자세한내용은릴리스별gpu지원(并行计算工具箱)항목을참조하십시오。

miniBatchSize = 128;numObservations = dsTrain.NumObservations;numIterationsPerEpoch = floor(numObservations / miniBatchSize);选项= trainingOptions(“亚当”...“MiniBatchSize”miniBatchSize,...“GradientThreshold”2,...“洗牌”“永远”...“阴谋”“训练进步”...“详细”、假);

trainNetwork함수를사용하여LSTM신경망을훈련시킵니다。

net = trainNetwork(dsTrain,layers,options);

새데이터를사용하여예측하기

새보고서3개의이벤트유형을분류합니다。새보고서를포함하는字符串형배열을만듭니다。

reportsNew = [“冷却剂在分拣机下面。”“分拣机在启动时炸断保险丝。”“有一些非常响亮的咔嗒声从组装。”];

데이터저장소textDatastore처럼전처리단계를사용하여텍스트데이터를전처리합니다。

documents = tokenizedDocument(reportsNew);文档=较低(文档);documents = eraspunctuation(文档);Predictors = doc2sequence(emb,documents);

훈련된LSTM신경망을사용하여새시퀀스를분류합니다。

labelsNew =分类(net,predictors)
labelsNew =3×1分类泄漏电子故障机械故障

참고 항목

|||(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)|(深度学习工具箱)||||

관련 항목