CNNを使って波形か​ら回帰を行うことはで​きますか?

https://jp.mathworks.com/help/nnet/examples/train-a-convolutional-neural-network-for-regression.html 上記では,たたみ込みニューラル ネットワークを使用して回帰モデルにあてはめ、画像の回転角度を予測する方法を 説明していますが,この入力を波形にして音声の距離を推定する回帰をしたいです. 具体的には,波形は1×4500の行列になっています.一つの波形に正解値(距離)は1つです. CNNを使って波形から回帰を行うことは可能でしょうか?方法もできれば教えていただきたいです. ちなみにAutoencoderを使って特徴量を抽出し,重回帰分析にて推定を行うことはできました.

 Réponse acceptée

michio
michio le 19 Jan 2018
Modifié(e) : michio le 19 Jan 2018

2 votes

imageInputLayer([1 6000]);
などと、信号を 1xN の"画像"として取り扱った例があります。
layers = [imageInputLayer([1 6000])
convolution2dLayer([1 200],20,'stride',1)]
と構成していきます。英語ですがより具体的な例はこちらも参考にしてください。

4 commentaires

Kengo Atomi
Kengo Atomi le 26 Jan 2018
ありがとうございます.
imageInputLayer([1 4500]);
layers = [ ...
imageInputLayer([1 4500]);
convolution2dLayer([1 100],10,'stride',1)
reluLayer
fullyConnectedLayer(1)
regressionLayer]
options = trainingOptions('sgdm','InitialLearnRate',0.001, ...
'MaxEpochs',15);
と定義して,
trainNetwork(train_x,train_t,layers,options)
を実行したところ,
Invalid training data. X and Y must have the same number of observations.
とエラーが出てしまいます.配列のサイズは同じはずですが,どういった原因が考えられるのでしょうか?
michio
michio le 27 Jan 2018
エラーメッセージだけからの原因特定は難しいですね、、すいません。可能でればこちらでもエラーを再現できるようなサンプルデータを共有して頂くことはできますか? train_x, train_t の形に問題がある場合にも、どのような形で用意すべきかを文章ではなく具体的に提示することもできますので。エラーさえ出れば、10セット分だけなど最低限必要な量だけで構いません。
Kengo Atomi
Kengo Atomi le 28 Jan 2018
何度も申し訳ございません.使用しているデータ100セットをmatファイルで共有させていただきます.実際に使用しているデータの数値とは異なりますが,このような形で8000セット(8000*4500)用意しています. よろしくお願い致します.
michio
michio le 29 Jan 2018
データ助かりました。ありがとうございます。
まず、下記のページで紹介している中で
trainedNet = trainNetwork(X,Y,layers,options)
の構文を使うことを想定します。 https://jp.mathworks.com/help/nnet/ref/trainnetwork.html
「入力引数」の項目を見ると、入力引数 X (train_x に対応)は
4 次元数値配列として指定します。最初の 3 つの次元は高さ、幅、およびチャネルとし、最後の次元は個々のイメージにインデックスを付けるものでなければなりません。
との記載がある通り、4次元数値配列である必要があります。(もともと画像を想定したものなので・・)
ですので、
train_x = reshape(train_x', 1,4500,1,100);
と、もともとの 100x4500 の配列を 1x4500x1x100 に修正した上で trainNetwork 関数に入力してください。train_t の方はそのままでOKかと思います。
ちなみに、
train_x'
と一旦転置しているのは、MATLABの配列はコラムメジャーであるから、、ですがデータの並び順を正しく意図通りに変形するための措置です。
X = [1,2,3;4,5,6;7,8,9]
reshape(X, 1, 9)
reshape(X', 1, 9)
と実行していただけるとなんとなくイメージがわくと思います。

Connectez-vous pour commenter.

Plus de réponses (1)

mizuki
mizuki le 24 Déc 2017

4 votes

> CNNを使って波形から回帰を行うことは可能でしょうか?
はい、可能です。
例にも含まれていますが、回帰用の層 regressionLayer が用意されていますのでこれでCNN回帰をすることができます。また、入力が画像ではなく信号とのことですので、入力層を SequenceInputLayer にします。層の定義はだいたいこんな感じです。
layers = [ ...
sequenceInputLayer(*)
convolution2dLayer(*)
reluLayer
maxPooling2dLayer(*)
fullyConnectedLayer(*)
softmaxLayer
regressionLayer]
なお、時系列データですと、CNN ではなく LSTM のアルゴリズムもよく使用されます。こちらも MATLAB で使用できます(ドキュメントに例もあります)ので、使えそうでしたらどうぞ。

4 commentaires

Kengo Atomi
Kengo Atomi le 30 Déc 2017
Modifié(e) : michio le 19 Jan 2018
回答ありがとうございます. 層を
layers = [ ...
sequenceInputLayer(4500)
convolution2dLayer(12,25)
reluLayer
fullyConnectedLayer(1)
regressionLayer]
オプションを
options = trainingOptions('sgdm','InitialLearnRate',0.001, ...
'MaxEpochs',15);
で定義することはできたのですが,
trainNetwork(train_x,train_t,layers,options)
を行っても,インデックスが行列の次元を超えていますとエラーが出てしまいます. train_xには一行に一つの波形を入れており,8000セットあります.つまり,8000x4500の行列になっていて,train_tには対応する行に値が1つ入っています.train_tは8000x1の行列です. train_x,train_tはどのような形で用意するべきなのでしょうか?また, sequenceInputLayer(4500)の値が間違えているのでしょうか?何度も質問してすみません.
mizuki
mizuki le 4 Jan 2018
入力波形は行列の形ではなく、セル配列にするようです。 train_x{i} を i 番目の波形の
#features x 波形の点数
のように定義します。具体的には
load JapaneseVowelsTrain
をして XTrain を確認すると分かりやすいかと思います。同じ現象を再現できていないのでこれだけで解決するかは不明です。もし先に進めなければ追加でご質問ください。
Kengo Atomi
Kengo Atomi le 4 Jan 2018
回答ありがとうございます.train_xをセル配列で,i行目(i=1:8000)に4500x1の波形を入れてみても,
エラー: trainNetwork (line 140) インデックスが行列の次元を超えています。
原因: インデックスが行列の次元を超えています。 とエラーが出ます.
layers = [ ... sequenceInputLayer(4500)
convolution2dLayer(12,25)
reluLayer
fullyConnectedLayer(1)
regressionLayer]
のfullyConnectedLayer(1)は,回帰なので1で合っているのでしょうか?たびたび質問してすみません.
mizuki
mizuki le 31 Jan 2018
Modifié(e) : mizuki le 31 Jan 2018
R2017b のバージョンでは、sequenceInputLayer() に対して convolution2dLayer() を適用することができない状況のようです。誤情報ですみませんでした。
LSTMと回帰を組み合わせて使用する方法については将来のバージョンで検討がされているということです。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Deep Learning Toolbox dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!