2017-09-19 20 views
2

出力が46226カテゴリのうちの1つであるデータセットがあります。私も数百万のサンプルを持っています。keras.utils.np_utils.to_categoricalのMemoryError

しかし、Keras/TensorFlowは出力のワンホットエンコーディングを必要とするようです。

np_utils.to_categorical(y_indices、num_classes)は、8000 x 46226の行列が必要であるため、メモリ不足エラーが発生します。

私の仕事用PCには、 'numpy.zeros((8000,46226))'を実行しようとすると、8Gのメモリがありますが、y_indicesをone-hotエンコーディングに変更するとfine.Butが動作しますエラー:

------------------------------------------------------------------------ 
    MemoryError       Traceback (most recent call last) 
    <ipython-input-9-7b9df1cf8cee> in <module>() 
    ----> 1 Y_cat = to_categorical(Y, num_classes=nb_classes) 

    c:\program files\anaconda3\envs\python35\lib\site-packages\keras\utils\np_utils.py in to_categorical(y, num_classes) 
     22  num_classes = np.max(y) + 1 
     23  n = y.shape[0] 
    ---> 24  categorical = np.zeros((n, num_classes)) 
     25  categorical[np.arange(n), y] = 1 
     26  return categorical 

    MemoryError: 

Kerasにこの障害を解決させる方法はありますか?もし誰かが最高のやり方を指摘したら、私はいくつかのコードを追加して嬉しいです。

+0

データの保存方法を変更する(可能でないように思われる)か、メモリを増やすことをお勧めします。 –

答えて

7

実際にワンホットエンコードされたラベルは必要ありません。整数ラベルを受け入れるsparse_categorical_crossentropyの整数ラベルを使用することができます。

この方法では、メモリ不足エラーが発生してはいけません。もう1つの選択肢は、ジェネレータ(fit_generatorと一緒に使用する)とワンホットエンコードラベルをオンザフライで作成することです。