batch_size对keras中model.fit中的迭代次数没有影响

时间:2019-05-16 06:17:01

标签: keras

我有一个简单的演示模型:

input_layer = Input(shape=(100,))
encoded = Dense(2, activation='relu')(input_layer)

X = np.ones((1000, 100))
Y = np.ones((1000, 2))
print(X.shape)

model = Model(input_layer, encoded)
model.compile(loss='categorical_crossentropy', optimizer='adam')
model.fit(x=X, y=Y, batch_size = 2)

输出为:

2.2.4
(1000, 100)
Epoch 1/1
1000/1000 [==============================] - 3s 3ms/step - loss: 1.3864

为什么一个纪元内要进行1000次迭代(如输出所示)。 我尝试更改此设置,但不更改输出。我想应该是1000/2 =500。请解释一下我的理解有什么问题,以及如何正确设置批次大小。

谢谢

2 个答案:

答案 0 :(得分:1)

它会更改批处理大小,尽管您没有明确看到它是一个步骤,但进度条的显示速度更快。前段时间我心里有同样的问题。

如果要明确查看每个步骤,可以使用steps_per_epochvalidation_steps

下面列出了一个示例。

model.fit_generator(training_generator,
                        steps_per_epoch=steps_per_epoch,
                        epochs=epochs,
                        validation_data=validation_generator,
                        validation_steps=validation_steps)

在这种情况下,steps_per_epoch =训练样本数/批处理大小,而validation_steps =训练样本数/批处理大小。

在培训期间,您将看到500个步骤,而不是1000个步骤(前提是您有1000个培训样本,并且batch_size为2)。

答案 1 :(得分:0)

model.fit中,进度条左侧的数字用于计数样本,因此它始终是当前样本/样本总数。

也许您感到困惑,因为它在model.fit_generator中的工作方式有所不同。在那里,您实际上看到了迭代或批处理。