2017-07-05 17 views
1

KerasとCIFAR-10データセットを使用してデータ増強を実装する方法を学習しています。私はオンラインチュートリアルとこの本の助けを借りて学んでいますDeep learning with Keras.データ増強中のKeras CONVトレーニングは、誤ったバッチサイズとトレーニング例数を表示しているようです

具体的なコードの詳細はhereです。ここで

は私の問題であり、私はそれは私の一部にいくつかの誤解に関連する特定の午前:これは私のCONVが設定されている

。データセットは、カテゴリに変換

IMG_CHANNELS = 3 
IMG_ROWS = 32 
IMG_COLS = 32 
BATCH_SIZE = 128 
NB_EPOCH = 50 
NB_CLASSES = 10 
VERBOSE = 1 
VALIDATION_SPLIT = 0.2 
OPTIM = RMSprop() 

ロード、フロートと正規化:

(X_train, y_train), (X_test, y_test) = cifar10.load_data() 
Y_train = np_utils.to_categorical(y_train, NB_CLASSES) 
Y_test = np_utils.to_categorical(y_test, NB_CLASSES) 
X_train = X_train.astype('float32') 
X_test = X_test.astype('float32') 
X_train /= 255 
X_test /= 255 

作成ジェネレータ

datagen = ImageDataGenerator(
     featurewise_center=False, # set input mean to 0 over the dataset 
     samplewise_center=False, # set each sample mean to 0 
     featurewise_std_normalization=False, # divide inputs by std of the dataset 
     samplewise_std_normalization=False, # divide each input by its std 
     zca_whitening=False, # apply ZCA whitening 
     rotation_range=0, # randomly rotate images in the range (degrees, 0 to 180) 
     width_shift_range=0.1, # randomly shift images horizontally (fraction of total width) 
     height_shift_range=0.1, # randomly shift images vertically (fraction of total height) 
     horizontal_flip=True, # randomly flip images 
     vertical_flip=False) # randomly flip images 
datagen.fit(X_train) 

トレインモデル(私はモデルをリストされていない)

model.fit_generator(datagen.flow(X_train, Y_train, 
        batch_size=BATCH_SIZE), 
        samples_per_epoch=X_train.shape[0], 
        nb_epoch=NB_EPOCH, 
        verbose=VERBOSE) 

私の問題は私が練習すると、次のように表示されます:

Epoch 1/40 
390/390 [==============================] - 199s - loss: 0.9751 - acc: 0.6588 

なぜ私は390の例を得ているのか分かりません。 Samples_per_epochはX_train.shapeに等しい[0] 50000であり、バッチ・サイズが128であるので、私はそれが128

答えて

2

プログレスバーは、サンプルの数が、数が表示されないのバッチで50000まで行く必要考え(model.fit_generatorの代わりにmodel.fitを使用すると、サンプルが自動的に表示されます)。各バッチには128個のサンプルが含まれ、合計50,000個のサンプルがあります。 50,000/128 = 390.625。そのため、50,000ではなく390が表示されます。

model.fit_generatorを使用しているため、合計サンプル数を表示することはできません。 batch_sizeを1に設定した場合を除きます。この理由は、steps_per_epochsまたはsamples_per_epochのしきい値が(*)に達するまで、ジェネレータがデータを無期限にループすることが予想されるためです。

ところで、これをのコールバックProgbarLoggerで変更すると、hereと表示されます。

+0

これは私が疑っていたものですが、何らかの奇妙な理由から、その本にそのプロセスを示す図があり、50000を示しています。これは確かですか? – GhostRider

+0

はい、私は自分の質問を編集しました。 'ProgbarLogger'コールバックでプログレスバーを変更すると、すべてのサンプルが更新されます。 –

+0

モデルをフィッティングする前にこれを追加しました(そして "サンプル"と "ステップ"の両方を使用しました)。 – GhostRider

関連する問題