質問: tensorflowを用いて画像認識を行いたいのですが、学習させる画像データが約200万枚あり、自作したCNNに入れて学習させようとすると、メモリエラーとなりました。 そこで、質問なのですがこのような大量の画像データを学習させるにはどのようにすればよいのでしょうか? 画像データと正解ラベルの入ったデータを複数に分割してcnnに読み込むのかわかりません。 また、ラベルが数値でなくUTF-8の文字コード(例:EFBD239など)にしており、学習後に画像認識する際に、結果のラベルを文字コードから文字にしたいと考えています。 ただ、ラベルを数字でつける例はよく見るのですが、文字コードで画像にラベルをつけてnumpyなどの形式(.npzなど)に変換する方法がわかりません。 画像データ自体は文字の画像なので、ラベルは数字でなく文字コードで読み込みたいです。 以上まとめると、 1.200万枚の画像で30000種類のラベルがあるデータを学習させるにはどのようにすればよいか?(メモリエラーなどの問題を回避する方法が知りたいです。) 2. 画像データとラベル(文字コード)を最も扱いやすい形式に変換し、CNNに読み込む方法は何かあるのでしょうか? わかりにくいかもしれませんが、回答いただければ幸いです。
回答: > > 200万枚の画像で30000種類のラベルがあるデータを学習させるにはどのようにすればよいか?(メモリエラーなどの問題を回避する方法が知りたいです。) > > > 全データをメモリ上に展開するのではなく、作成するミニバッチ分だけ適宜HDDから読み込んでください。tf.TFRecordReader() が使えます。 Inputs and Readers > > 2. 画像データとラベル(文字コード)を最も扱いやすい形式に変換し、CNNに読み込む方法は何かあるのでしょうか? > > > データを TensorFlow で扱いやすいよう TF Record 形式に予め変換しておくとよいと思います。 TensorFlow の I/O の仕組みはかなりややこしいので、公式ドキュメントや「tfrecord」で検索してでてくるページを参考にしてください。 TensorFlowのデータフォーマットTFRecordの書き込みと読み込み方法