わかめ’s diary

エンジニア見習いがちょっとずつITを学んでいきます

PythonにマイPCを寝取られた話

 

タイトル意味不明すぎると自分でも思うけど実際の話。正確にはPCというよりCPUとかGPUとかのメモリ。Webアプリについて綴ろうと思ってたはずがこの一件のせいで出来なくなったし、折角だからこの事件について語る。

 

事件はある日突然に

 

研究進めるために機械学習用のデータ作ろうとしていた時にその事件は起きた。プログラムを動かし始めた時点で薄々気付いてはいたけど、明らかに動きがゆっくりで実行完了までにかなりの時間がかかると予想できた。

 

当時は夜遅かったし、朝まで終わらないなと思ってYouTubeを見始めた。すると途端にプログラムは強制終了され、途中までの実行結果が全てお釈迦に。

いつも寝る前にYouTube見るのを日課にしていたのがここにきて仇となった。その日は仕方無く諦めて、プログラム以外のアプリを全て終了した。

 

君は4GBのCSVファイルを見たことがあるか

 

朝目覚めてからもプログラムは動き続けて、実行開始から7、8時間くらいが経過してようやく完了した。学習データとテストデータをそれぞれ作成したんだけど、結果確認のために配列サイズ表示したらこんなことに。

学習データ・テストデータの配列サイズ

配列サイズを表示したら

なんだ19万行21万行って・・・。

上から順に、①学習データの特徴量データ、②学習データのラベルデータ、③テストデータの特徴量データ、④テストデータのラベルデータって並んでるから、特徴量データがとんでもない量に。

音認識をするために特徴量にはMFCCを抽出してた訳だが、1データが24×2206のサイズで抽出されたからこんなことに。デカすぎんだろ・・・。

配列の用素数を単純に計算してみると、学習データは195816×2206 = 431970096(約4億3千万)データ、テストデータは210840×2206 = 465113040(約4億6千万)データもある。

しかもそれぞれのデータがfloat型だからとんでもない容量になったというわけ。

 

このデータをCSVファイルにしてみたらこんな感じに。

CSVファイルにしてみた結果

CSVファイルにしてみた結果

いやテキストデータで4GB超えるってありえんでしょ普通。開こうとしても全然読み込み終わらないから結果が正しいかも分からん。

しかも最初は195816×2206の形だとよろしくないから(24×2206, 8159)の形に直してCSVファイルに書き込んでたんだけど、数千とか数万単位のデータだと途中が...で省略されちゃうからうまく書き込めてなかった。

文字列からfloat型に変換出来ない

文字列からfloat型に変換出来ない

 

良い解決策考えるのめんどくさかったから用素数4億超える1次元配列に直して保存した結果がさっきのCSVファイルww

4GBもあるデータ使って機械学習させたらどれだけ時間かかるのか恐ろしくて考えたくない。てか絶対に特徴量の抽出方法考え直さないとアカンて。

 

 

研究も一応やってるよの意も込めて書いてみた。

もし実行中めちゃめちゃ重くなるようなら研究室のPC使わないとだなあ.....。リモートで作業出来ていただけにそうなるとつらい。

Google Colaboratoryでワンチャン動かないかな。

 

実行中のスキマ時間にこの前買った参考書読み進めていくよ。

ではまた。