2017-12-26 18 views
0

私は私のデータは、このkeras入力データのnumpy配列へのリストを取得するための回避策はありますか?

type(datain) 
<class 'list'> 
len(datain) 
35000 
type(datain[0]) 
<class 'numpy.ndarray'> 
datain[0].shape 
(256,256,1) 

とネットワークに

AttributeError: 'list' object has no attribute 'shape' 
を養成しようとしたとき、私はこのエラーを取得するアレイのリスト私の入力データであることのように見える、kerasにCNNモデルを訓練しようとしています

np.array(datain)のように何かしようとすると、https://github.com/keras-team/keras/issues/4823は私のコンピュータがフリーズ/クラッシュします。 python listを使って入力を定義するのは合計で60秒ですが、numpy配列を最初から試しても、(256,256,1)配列あたり1秒のようになり、ネットワークにさまざまなテストや修正を行うつもりならば時間がかかります、
この問題の回避策はありますか?
ケラスのリストを使用する方法はありますか?
numpy配列を定義する別の方法は?
または私は何かを誤解していますか?

+0

これは、コンピュータのメモリのためにあまりにも多くのことがあります。ジェネレータで作業してください。 –

+0

発電機はどういう意味ですか? – Boris

+2

「np_data = np.array(datain [:100])」のような少量のデータを最初に試して、エラーがまだ発生するかどうかを確認してください。 –

答えて

1

データから発電機を作成する。

generatorはpythonのコンセプトであり、ループして結果を得ます。 Kerasの場合、ジェネレータは、X_trainy_trainのバッチを無期限に生成する必要があります。

だから、あなたが作ることができるシンプルな発電機は、次のとおりです。

def generator(batch_size,from_list_x,from_list_y): 

    assert len(from_list_x) == len(from_list_y) 
    total_size = len(from_list_x) 

    while True #keras generators should be infinite 

     for i in range(0,total_size,batch_size): 
      yield np.array(from_list_x[i:i+batch_size]), np.array(from_list_y[i:i+batch_size]) 

はトレーニングで発電機を使用してください:

model.fit_generator(generator(size,datain,dataout), 
        steps_per_epoch=len(datain)//size, 
        epochs=...,...) 
関連する問題