深層学習で大規模なCSVデータの取り扱い

3 views (last 30 days)
翔太 石田
翔太 石田 on 17 Feb 2022
Commented: 翔太 石田 on 18 Feb 2022
数値シミュレーションデータ(n行9列,約90GB)を複数のCSVに分割して保存し,特徴入力層を使用して深層ニューラルネットワークへの学習を試みています.
tabularTextDatastoreを使用してCSVデータの読み込む
データストアをtall配列に変換し,cvpartitionを利用して学習用データとテスト用データに分割
この学習データを利用してネットワークに学習(trainNetwork)
layers = [
featureInputLayer(numFeatures)
...(略)
regressionLayer];
このとき,「無効な学習データです。予測子は数値配列、データストアまたは table でなければなりません。シーケンス入力をもつネットワークでは、予測子をシーケンスの cell 配列にすることもできます。」とエラーが表示されました.
一部のデータを抜き出し,tall配列をやめたら動作したため,trainNetworkにtall配列のデータを渡していることが原因と思います.
しかし,全シミュレーションデータはメモリで抱えきれないため,大量のシミュレーションデータに対して学習が実行できません.
大規模のCSVデータを使用してtrainNetworkを動作させるにはどうすればよいでしょうか.

Accepted Answer

Hiro Yoshino
Hiro Yoshino on 17 Feb 2022
tall 変換せずに、datastore のまま分割すると良いです。datastore はレポジトリなので、メモリにデータをロードすることなくデータの管理ができます。分割する関数はこちら:
https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.imagedatastore.partition.html
trainNetwork 関数のオプションに validation data の設定が有ると思うので、そこに validation 用に取っておいたデータ適用すると良いかと思います。
datastore を全て読み込まずに、preview 等でデータを確認しながら少しずつモデルを作製されると良いかと思います。
上手く行ってから、大きなデータ全体に対して学習を試みることがお薦めです。
  3 Comments
Hiro Yoshino
Hiro Yoshino on 18 Feb 2022
失礼しました。
基本的に Deep Learning でテーブルデータを扱う事はほとんど無いので、こちらにあります通り、trainNetwork に対応していません。
もしですが、ディープラーニングを実行すること自体が目的でなければ、他のアルゴリズムを試されてはと思います。ディープラーニングは画像処理関連のアプリケーションに用いられる側面が強いです。理由としては、画像から特徴量を抽出するために通常はたくさんのフィルターを様々な設定で適用していくのですが、ディープラーニングに頼めば、フィルターと設定を一緒に最適化してくれるからです。なので、テーブルデータのように特徴量がある程度抽出されている状況で、ディープラーニングを使うのは、スーパーマーケットに行くのに F1 カーに乗る状況かも知れません。
こちらに、tall 配列対応 の関数があります。機械学習アルゴリズムが幾つかあるので、そちらでお試しいただけると良いかなと思います。この関数を使えば、モデルを学習するまでに gather をする必要が無いので、計算負荷は最小化されて、ビッグデータでのモデル作成も現実的になると思います。
翔太 石田
翔太 石田 on 18 Feb 2022
度々ありがとうございます.疑問が解決しました.
他のアルゴリズムの利用も含め検討いたします.
とても有益な情報ありがとうございました.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!