【发布时间】:2019-10-01 00:54:14
【问题描述】:
我是 Keras 的新手,所以我对 Keras 文档和其他人使用 fit_generator 的示例感到困惑。当我用 100 个样本(为了快速输出。实际训练样本超过 10k)以 32 的批量大小测试 2 个 epoch:
# Create a generator that generates an image and a label one at a time (because loading all data into memory will freeze the laptop)
def generate_transform(imgs, lbls):
while 1:
for i in range(len(imgs)):
img = np.array(cv2.resize(imgs[i], (224, 224)))
lbl = to_categorical(lbls[i], num_classes=10)
yield (img, lbl)
history = model.fit_generator(generate_transform(x[:100], y[:100]),
steps_per_epoch=100/32,
samples_per_epoch=100,
nb_epoch=2,
validation_data=generate_transform(x_test[:100], y_test[:100]),
validation_steps=100)
# nb_val_samples=100?)
我收到了这个用户警告:
D:\Users\jason\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: UserWarning: The semantics of the Keras 2 argument `steps_per_epoch` is not the same as the Keras 1 argument `samples_per_epoch`. `steps_per_epoch` is the number of batches to draw from the generator at each epoch. Basically steps_per_epoch = samples_per_epoch/batch_size. Similarly `nb_val_samples`->`validation_steps` and `val_samples`->`steps` arguments have changed. Update your method calls accordingly.
D:\Users\jason\AppData\Local\Continuum\Anaconda3\lib\site-packages\ipykernel_launcher.py:8: UserWarning: Update your `fit_generator` call to the Keras 2 API: `fit_generator(<generator..., steps_per_epoch=100, validation_data=<generator..., validation_steps=100, epochs=2)`
输出看起来像这样:
Epoch 1/2
100/100 [==============================] - 84s 836ms/step - loss: 3.0745 - acc: 0.4500 - val_loss: 2.3886 - val_acc: 0.0300
Epoch 2/2
100/100 [==============================] - 86s 864ms/step - loss: 0.3654 - acc: 0.9000 - val_loss: 2.4644 - val_acc: 0.0900
我的问题是:
我的调用对这些参数及其提供的值是否正确?
我的模型是否在每个步骤中使用 32 个图像和标签进行了训练?并且每个 epoch 训练了 100/32 步?
我需要使用参数
steps_per_epoch吗?我应该使用哪个参数:
validation_steps或nb_val_samples?我的模型是否将验证生成器的所有 100 个样本(如
x_test[:100]所示)验证了 100 次(如validation_steps=100所示),还是每个样本仅验证 100 次(因为验证生成器一次只能产生一个样本)?为什么输出没有显示步数?-
我的模型是否使用第一个 epoch 的训练权重再次重新训练相同的数据,这就是为什么训练精度从第一个 epoch 的 0.45 跃升至第二个 epoch 的 0.9?
您能帮我解决以上问题吗?
提前致谢。
【问题讨论】:
-
你用的是哪个keras版本?
-
嗨 kruxx,我使用的是 Keras 2.2.4
标签: keras neural-network