CNNを使って波形から回帰を行うことはできますか?
    6 views (last 30 days)
  
       Show older comments
    
https://jp.mathworks.com/help/nnet/examples/train-a-convolutional-neural-network-for-regression.html 上記では,たたみ込みニューラル ネットワークを使用して回帰モデルにあてはめ、画像の回転角度を予測する方法を 説明していますが,この入力を波形にして音声の距離を推定する回帰をしたいです. 具体的には,波形は1×4500の行列になっています.一つの波形に正解値(距離)は1つです. CNNを使って波形から回帰を行うことは可能でしょうか?方法もできれば教えていただきたいです. ちなみにAutoencoderを使って特徴量を抽出し,重回帰分析にて推定を行うことはできました.
0 Comments
Accepted Answer
  michio
    
 on 19 Jan 2018
        
      Edited: michio
    
 on 19 Jan 2018
  
       imageInputLayer([1 6000]);
などと、信号を 1xN の"画像"として取り扱った例があります。
 layers = [imageInputLayer([1 6000])
    convolution2dLayer([1 200],20,'stride',1)]
と構成していきます。英語ですがより具体的な例はこちらも参考にしてください。
4 Comments
  michio
    
 on 29 Jan 2018
				データ助かりました。ありがとうございます。
まず、下記のページで紹介している中で
 trainedNet = trainNetwork(X,Y,layers,options)
「入力引数」の項目を見ると、入力引数 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)
と実行していただけるとなんとなくイメージがわくと思います。
More Answers (1)
  mizuki
    
 on 24 Dec 2017
        > CNNを使って波形から回帰を行うことは可能でしょうか?
はい、可能です。
例にも含まれていますが、回帰用の層 regressionLayer が用意されていますのでこれでCNN回帰をすることができます。また、入力が画像ではなく信号とのことですので、入力層を SequenceInputLayer にします。層の定義はだいたいこんな感じです。
layers = [ ...
    sequenceInputLayer(*)
    convolution2dLayer(*)
    reluLayer
    maxPooling2dLayer(*)
    fullyConnectedLayer(*)
    softmaxLayer
    regressionLayer]
See Also
Categories
				Find more on Deep Learning Toolbox in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!