【问题标题】:Why is does my Keras model only train on 1407 training instances instead of 45k? [duplicate]为什么我的 Keras 模型只训练 1407 个训练实例而不是 45k? [复制]
【发布时间】:2020-09-28 19:53:12
【问题描述】:
Epoch 2/100
**1407/1407** [==============================] - 17s 12ms/step - loss: 1.9419 - accuracy: 0.2907 - val_loss: 2.1100 - val_accuracy: 0.2406
Epoch 3/100

出于某种奇怪的原因,它说它只训练了 1407 个实例,尽管我传递的训练数据的形状是 45k

x_train.shape
=> (45000, 32, 32, 3)

【问题讨论】:

  • 您能否展示一下您是如何设置模型的,以及您在致电.fit() 时使用的参数?来自文档:“batch_size:整数或无。每次梯度更新的样本数。如果未指定,batch_size 将默认为 32”,什么是 45000/32?

标签: python tensorflow machine-learning keras data-science


【解决方案1】:

数字1407不是指样本数,而是指每个epoch的步数。例如,假设您有 1000 个训练样本。如果您设置 batch_size=100,那么每个 epoch 需要 10 步才能遍历整个数据集。如果您没有指定 batch_size model.fit 默认为 32. 45000/32=1406.25 所以它会四舍五入到 1407. 1407 X 32=45024 所以对于每个 epoch 来说,你会遍历整个训练集一次,再加上 24 个额外的样本。对于验证数据,最好每个 epoch 只检查一次验证集。因此,尝试选择验证批量大小,使得 validation_samples/validation_batch_size 是一个整数,然后将其指定为 model.fit 中 validation_steps 的值。这是一个方便的小函数,它将确定最大可用批量大小和步数,其中 length 是数据集中的样本数,b_max 是根据内存容量允许的最大批量大小。

def get_bs(length,b_max):
    batch_size=sorted([int(length/n) for n in range(1,length+1) if length % n ==0 and length/n<=b_max],reverse=True)[0]  
    return batch_size,int(length/batch_size)
# example
batch_size, steps=get_bs(1000, 80)
print (batch_size, steps)
# results in  batch_size=50 and steps=20

此函数对于确定长度是否为素数也很有用,因为它会返回一个 1 的 batch_size,只需使 b_max=length-1。

【讨论】:

  • 好的,我现在明白了。但是为什么我在网上阅读的这段代码在任何地方都没有指定批量大小时有 45k 步...不应该也是 1407k 吗? Epoch 38/100 45000/45000 [==============================] - 15s 332us/sample - loss: 0.9966 - accuracy: 0.6496 - val_loss: 1.3946 - val_accuracy: 0.5340
猜你喜欢
  • 1970-01-01
  • 2019-08-27
  • 2017-03-27
  • 2019-11-25
  • 2018-08-21
  • 1970-01-01
  • 2019-01-20
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多