深層学習を使った時系​列予測をする際のtr​ainNetwork​関数での取り扱い

13 Ansichten (letzte 30 Tage)
Naoto Iwaki
Naoto Iwaki am 7 Okt. 2019
Bearbeitet: Kazuya am 10 Okt. 2019
現在深層学習を使用した時系列データ予測のうちシーケンスデータの読み込みからネットワークの学習プロセスまでを行っています。そこで下記プログラムを作成して実行したところ、trainNetwork関数のところで「無効な学習データです。予測子はシーケンスの N 1 列の cell 配列でなければなりません。ここで N はシーケンスの数です。すべてのシーケンスは同じ特徴次元と、少なくとも 1 つのタイム ステップをもたなければなりません。」と表示されました。次に、1行ずつデバッグしたところN1列のcell配列を予測子を作りlstm層などの作成までは確認できました。そこでエラーメッセージ後半の文章のほうが問題になっていると思っています。しかし、修正方法がわかりません。
ちなみに以下のプログラムは「深層学習を使用した時系列予測」などを参照にして作りました。
以下プログラム
T1=readtable('pressure_data_20190326_1.xlsx');
%T1:エクセルデータ(添付)の読み込み
%table2arraytable型配列を変更
%lambda=1.0 pressure data
T1_data=table2array(T1(4:end,2:end));
%1N列の配列へ
for i=1:300
T1_array{i}=T1_data(1:end,i);
end
%転置
T1_a=(T1_array)';
%シーケンスの最初の90%で学習を行い残りの10%でテストする
numTimeStepsTrain = floor(0.9*numel(T1_a));
T1Train = T1_a(1:numTimeStepsTrain+1);
T1Test = T1_a(numTimeStepsTrain+1:end);
%予測子と応答の準備
XT1Train = T1Train(1:end-1);
YT1Train = T1Train(2:end);
%lstmアーキテクチャ 定義
numFeatures=1;
numResponse=1;
numHiddenUnits=200;
%lstm層
layers = [ ...
sequenceInputLayer(numFeatures)
lstmLayer(200)
fullyConnectedLayer(numResponse)
regressionLayer];
%トレーニングオプション
options = trainingOptions('adam', ...
'MaxEpochs',250, ...
'GradientThreshold',1, ...
'LearnRateSchedule','piecewise', ...
'LearnRateDropPeriod',125, ...
'LearnRateDropFactor',0.2, ...
'Verbose',0, ...
'Plots','training-progress')
net = trainNetwork(XT1Train,YT1Train,layers,options);
出力結果:
エラー: trainNetwork (line □□)
無効な学習データです。予測子はシーケンスの N 1 列の cell 配列でなければなりません。ここで N はシーケンスの数です。すべてのシーケンスは同じ
特徴次元と、少なくとも 1 つのタイム ステップをもたなければなりません。
エラー: LSTM (line □□)
net = trainNetwork(XT1Train,YT1Train,layers,options);

Akzeptierte Antwort

Kazuya
Kazuya am 8 Okt. 2019
原因は XT1Train の各セルの中身がセル配列になっていることの様です。各セルの中身が例えば double 型であれば動くはず。
冒頭を以下のように変えて試してみてください。数値部分だけを readtable で読み込む設定にしました。
opts = detectImportOptions(filename,'DataRange','B4');
T1=readtable('pressure_data_20190326_1.xlsx',opts,'ReadVariableNames',false);
T1_data = T1.Variables;
%1行N列の配列へ
for i=1:300
T1_array{i}=T1_data(1:end,i)';
end
  2 Kommentare
Naoto Iwaki
Naoto Iwaki am 8 Okt. 2019
ありがとうございます。変更するとtr​ainNetwork関数に通りました。
Kazuya
Kazuya am 8 Okt. 2019
Bearbeitet: Kazuya am 10 Okt. 2019
良かったです。データ、コードと用意いただいていたので回答しやすかったです。
ありがとうございます!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu イメージを使用した深層学習 finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!