我有一个简单的演示模型:
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。请解释一下我的理解有什么问题,以及如何正确设置批次大小。
谢谢
答案 0 :(得分:1)
它会更改批处理大小,尽管您没有明确看到它是一个步骤,但进度条的显示速度更快。前段时间我心里有同样的问题。
如果要明确查看每个步骤,可以使用steps_per_epoch
和validation_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
中的工作方式有所不同。在那里,您实际上看到了迭代或批处理。