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

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

Respuesta aceptada

michio
michio el 19 de En. de 2018
Editada: michio el 19 de En. de 2018
imageInputLayer([1 6000]);
などと、信号を 1xN の"画像"として取り扱った例があります。
layers = [imageInputLayer([1 6000])
convolution2dLayer([1 200],20,'stride',1)]
と構成していきます。英語ですがより具体的な例はこちらも参考にしてください。
  4 comentarios
Kengo Atomi
Kengo Atomi el 28 de En. de 2018
何度も申し訳ございません.使用しているデータ100セットをmatファイルで共有させていただきます.実際に使用しているデータの数値とは異なりますが,このような形で8000セット(8000*4500)用意しています. よろしくお願い致します.
michio
michio el 29 de En. de 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)
と実行していただけるとなんとなくイメージがわくと思います。

Iniciar sesión para comentar.

Más respuestas (1)

mizuki
mizuki el 24 de Dic. de 2017
> CNNを使って波形から回帰を行うことは可能でしょうか?
はい、可能です。
例にも含まれていますが、回帰用の層 regressionLayer が用意されていますのでこれでCNN回帰をすることができます。また、入力が画像ではなく信号とのことですので、入力層を SequenceInputLayer にします。層の定義はだいたいこんな感じです。
layers = [ ...
sequenceInputLayer(*)
convolution2dLayer(*)
reluLayer
maxPooling2dLayer(*)
fullyConnectedLayer(*)
softmaxLayer
regressionLayer]
なお、時系列データですと、CNN ではなく LSTM のアルゴリズムもよく使用されます。こちらも MATLAB で使用できます(ドキュメントに例もあります)ので、使えそうでしたらどうぞ。
  4 comentarios
Kengo Atomi
Kengo Atomi el 4 de En. de 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 el 31 de En. de 2018
Editada: mizuki el 31 de En. de 2018
R2017b のバージョンでは、sequenceInputLayer() に対して convolution2dLayer() を適用することができない状況のようです。誤情報ですみませんでした。
LSTMと回帰を組み合わせて使用する方法については将来のバージョンで検討がされているということです。

Iniciar sesión para comentar.

Categorías

Más información sobre イメージを使用した深層学習 en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!