csvの一次元データ​に対する畳込みニュー​ラルネットワークの入​力データのばらつきに​ついて

音データのcsvデータに対し畳み込みニューラルネットワークを行っています。
CNNレイヤーに対応したデータストアはimageDatastoreしかないので、下記の読み込み関数を定義して読み込みを行っています。
function data = readDatastoreCSV(filename)
data = csvread(filename);
data = reshape(data, [1 1200 1 1]);
この場合読み込み関数で読み込むデータは1200データとしなければなりませんが、今手元にある入力データは1100や1400などばらつきがある状態です。
ですので、csvデータに対し0パディングのようにデータの水増しを行いたいと思っています。
例えば、1200データが存在するcsvに対し300データ「0」を末尾に加えて、この作業をすべてのデータ数を1500として扱おうと考えています。
こういったcsvデータの水増しはMATLABで可能でしょうか?
もしくは、MATLABのcnnの関数内でデータの数を合わせてくれる機能などが存在しているのでしょうか?
読み込み関数内で行ってもいいですし、csvデータのみ編集でもよいのでご教授いただければ幸いです。

 Accepted Answer

Kazuya
Kazuya on 11 Dec 2018
Edited: Kazuya on 11 Dec 2018

2 votes

データ型など注意する必要があるかもしれませんが、
function data = readDatastoreCSV(filename)
tmp = csvread(filename); % データ読み込み(N < 1500が前提)
N = length(tmp); % 読み取ったデータ要素数確認
data = zeros(1500,1); % 全て 0 のベクトル定義
data(1:N,1) = tmp; % filename のデータをコピー
data = reshape(data, [1 1500 1 1]);
とすれば、とりあえず結果出てくる data は 1500要素で揃います。

5 Comments

Jo Sasaki
Jo Sasaki on 17 Dec 2018
そちらの読み取り関数を定義し学習を行おうとしたところ、
エラー: dlmread (line 147)
ファイルと形式文字ベクトルとが一致しません。
'Numeric' フィールドをファイルから読み取り中に、トラブルが発生しました (行番号 1、フィールド番号 1) ==> "18.754"\n
エラー: csvread (line 48)
m=dlmread(filename, ',', r, c);
とエラーが出ました。csvread単体でcsvが読み取り可能なのかどうかを試行したところ、最初は読み取れたのたりしたですが、途中から上記のエラーが出たりとエラーになる基準がよくわかりませんでした・・・csvデータはデータの個数が違えど同じcsvデータですので、読み取る際に影響は出ないと思います。
csvファイルは縦1列にデータが存在しているのですがCNNの場合データをtranspose関数などで転置を行う必要があるのでしょうか?
とにかくエラーの原因が不明ですので考えられる原因、もしくはこの問題を解決する方法をご教授していただきたいです。
Kazuya
Kazuya on 17 Dec 2018
csv ファイルにフォーマットが違うものが混ざっているんでしょうか。。
エラーの原因を突き止めるにはまず、、同じ csv ファイルについて、読み取ることができるときと、読み取れないとき(エラーを出すとき)があるのかどうかは明確にしたいですねー。
dbstop if error
と実行しておくと、エラーが起こったときにデバッグモードに入るので、ファイルの特定に役立つかもしれません。試してみてください。
Jo Sasaki
Jo Sasaki on 18 Dec 2018
まず大本のcsvreadのところで読み込めないエラーが起きているみたいです。
csvの分割は他のツールで自動的に行っているのですが、分割前のcsvは読み取れるのですが、分割後のcsvで読み込めないようです。
dlmreadのスクリプトを見たところASCIIで書き出されたcsvを読み込むことができるみたいなので、ちゃんとASCIIで書き出したはずなのですが読み取れないみたいです。
分割ツールとmatlabの相性があまりよくないみたいですね。
Kazuya
Kazuya on 18 Dec 2018
分割後の csv はどれも csvread 関数単体で実行しても読み取れないということですか?先日の書き込みからはすべてが読み取れないわけではなさそうでしたが。
  • 読み取れる csv ファイルと読み取れない csv ファイルの特定
  • 同じ csv ファイルでも読み取れる時と読み取れない時があるのかどうか
の2点を確認せずに、いろいろ試しても解決(原因の理解)にはつながらないですよー。うっかり動くこともあるとは思いますが。
Jo Sasaki
Jo Sasaki on 20 Dec 2018
読み取れるCSVは私がマクロで分割したもということに先日気づきました。
結局しっかりとした根拠は見つからなかったのですがフリーの分割ツールで分割することはNGだという結論に至りました。
なので、MATLABでcsv分割のコードを作成し分割し学習を行うことに成功しました。
ご丁寧な対応ありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Asked:

on 10 Dec 2018

Commented:

on 20 Dec 2018

Community Treasure Hunt

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

Start Hunting!