python - keras fit_generator 中 nb_epoch、samples_per_epoch 和 nb_val_samples 的标准?

标签 python tensorflow keras conv-neural-network

我创建了一个简单的猫狗图像分类(卷积神经网络)。拥有每类 7,000 个训练数据和每类 5,500 个验证数据。

我的问题是我的系统没有完成所有时期。如果有人可以解释选择 nb_epoch、samples_per_epoch 和 nb_val_samples 值的比例或标准以从给定数量的训练和验证数据中获得最大 yield ,我将不胜感激。

以下是我的代码:

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.callbacks import EarlyStopping
import numpy as np
from keras.preprocessing import image
from keras.utils.np_utils import probas_to_classes

model=Sequential()
model.add(Convolution2D(32, 5,5, input_shape=(28,28,3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Convolution2D(32,3,3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))

model.add(Dense(2))
model.add(Activation('softmax'))

train_datagen=ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen=ImageDataGenerator(rescale=1./255)

train_generator=train_datagen.flow_from_directory(
r'F:\data\train',
target_size=(28,28),
classes=['dog','cat'],
batch_size=10,
class_mode='categorical',
shuffle=True)

validation_generator=test_datagen.flow_from_directory(
r'F:\data\validation',
target_size=(28, 28),
classes=['dog','cat'],
batch_size=10,
class_mode='categorical',
shuffle=True)

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
early_stopping=EarlyStopping(monitor='val_loss', patience=2)
model.fit_generator(train_generator,verbose=2, samples_per_epoch=650, nb_epoch=100, validation_data=validation_generator, callbacks=[early_stopping],nb_val_samples=550)

json_string=model.to_json()
open(r'F:\data\mnistcnn_arc.json','w').write(json_string)
model.save_weights(r'F:\data\mnistcnn_weights.h5')
score=model.evaluate_generator(validation_generator, 1000)

print('Test score:', score[0])
print('Test accuracy:', score[1])

img_path = 'F:/abc.jpg'
img = image.load_img(img_path, target_size=(28, 28))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

y_proba = model.predict(x)
y_classes = probas_to_classes(y_proba)
print(train_generator.class_indices)
print(y_classes)

最佳答案

samples_per_epoch 通常设置为:

samples_per_epoch=train_generator.nb_samples

通过这种方式,您可以确保每个时期看到的样本数量等于训练集的大小。这意味着您会看到每个时期的所有训练样本。


nb_epoch 完全取决于您。它决定了您对 samples_per_epoch 定义的数字进行迭代的次数。

举个例子,在你的代码中,你的模型现在正在“看到”(nb_epoch * samples_per_epoch) 图像,在这种情况下是 65000 张图像。


nb_val_samples 确定您的模型在完成每个时期后评估的验证样本数量。这也取决于你。通常的事情是设置:

nb_val_samples=validation_generator.nb_samples

为了在完整的验证集上评估您的模型。


batch_size 确定有多少图像被同时提供给您的 gpu(或 cpu)。愚蠢的规则是设置你的 gpu 内存允许的最大 batch_size。理想的 batch_size 是当今研究的活跃领域,但通常更大的 batch_size 效果更好。

关于python - keras fit_generator 中 nb_epoch、samples_per_epoch 和 nb_val_samples 的标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42734182/

相关文章:

python - 在 Python Social Auth 中获取 Facebook 用户喜欢

python - python if/else 中的列表理解

tensorflow - 使用tensorflow在keras中切片损失函数的输入

python - 如何使用 chomping 指示器在 PyYaml 中添加文字字符串模式 |-

tensorflow - 如何在 TensorFlow 中使用带有 PCA 的 'sphereize data' 选项

python - 如何处理两个神经网络的两个输入

python - 回调问题 FailedPreconditionError

python - MNIST : Disparity between training and validation accuracy 的 Keras VGG 模型

python - 如何合并数值和嵌入序列模型以处理 RNN 中的类别

Python:将元组列表映射到字典的键上