CNNの入力層に対応したcsvデータのデータ処理
Show older comments
csvデータに対し1次元の畳み込みニューラルネットワークを作成する際に、複数のcsvデータを変数に格納しCNNの入力層に対応したデータの次元数を変えたいのですが、
wavedata = imageDatastore('C:\Users\MTL\Documents\notebook\matlabpracticecsv\drilldata','IncludeSubfolders',true, 'FileExtensions','.csv')
drilllabel = wavedata.Labels
[drilltrain,drilltest] = splitEachLabel(wavedata,0.8,'randomized');
Train_data = reshape(drilltrain, [1 4800 1 320]);
Test_data = reshape(drilltest, [1 4800 1 80]);
このコードで回すと エラー: reshape 要素数を RESHAPE するために変更してはいけません。 とエラーが出ます。
csvデータをCNNの入力層に対応するデータ処理はどう行えばよいのでしょうか?
Answers (1)
michio
on 1 Jun 2018
reshape 関数 は数値配列に対して実行する関数ですので、
Train_data = reshape(drilltrain, [1 4800 1 320]);
と imageDatastore に対しては意味を持ちません。関数の挙動は
doc reshape
と実行するかウェブ上のドキュメンテーションページで確認してみてください。
では、どこで reshape が実行できるかといいますと、imageDatastore の ReadFcn プロパティで指定する読み込み関数内で実行するのがよいのではと。
wavedata = imageDatastore('C:\Users\MTL\Documents\notebook\matlabpracticecsv\drilldata','IncludeSubfolders',true, 'FileExtensions','.csv')
wavedata.ReadFcn = @readDatastoreCSV;
と設定します。readDatastoreCSV 関数は下記のような定義で試してください。
function data = readDatastoreCSV(filename)
data = csvread(filename);
data = reshape(data, [1 4800 1 80]);
何はともあれ、例えば csv ファイル単体で試してみるなどデバッグしやすいサイズでまず試してみることをお勧めします。 例:(test.csv) の読み込み
imds = imageDatastore('test.csv','ReadFcn',@csvread,'FileExtensions','.csv');
imds.ReadFcn = @readDatastoreCSV;
data = read(imds);
4 Comments
Jo Sasaki
on 4 Jun 2018
michio
on 4 Jun 2018
imds = imageDatastore('test.csv','ReadFcn',@csvread,'FileExtensions','.csv');
imds.ReadFcn = @readDatastoreCSV;
data = read(imds);
繰り返しになりますが、例えば上記のように実行すると、read 関数実行時に、readDatastoreCSV 関数を使って test.csv が読み取られます。
この際に、reshape関数がなぜエラーを発するのかは、readDatastoreCSV 関数の reshape を実行している行にブレークポイントを設置して試すのが一番良いかと思います。
readDatastoreCSV関数の reshape を実行してる行の行番号横、"-"の位置をクリックして赤い丸(ブレークポイント)を設置してみてください。
reshape 関数実行時に
要素数を RESHAPE するために変更してはいけません。
というエラーが出るときは、次元変更前後で要素数が合致しなことが原因です。
例えば、 10x1 のベクトルを 5x3 の行列に変更しようとすると要素数が足りないのでエラーを発します。同じことが発生しているはずです。
data = reshape(data, [1 4800 1 1]);
でエラーが発生するということは、csv から読み取った data の要素数が 4800 でないことが原因であるはずです。ご確認ください。
Jo Sasaki
on 4 Jun 2018
michio
on 4 Jun 2018
それは良かったです。 面白い結果がでたらぜひまた教えてください。
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!