gpt4 book ai didi

python - 使用 steps_per_epoch 参数时,Keras 的训练速度极慢

转载 作者:行者123 更新时间:2023-11-28 21:33:29 26 4
gpt4 key购买 nike

当我在 model.fit(..) 方法中指定 steps_per_epoch 参数时,我注意到训练模型速度大幅下降。当我将 steps_per_epoch 指定为 None(或不使用它)时,epoch 的 ETA 是连续 2 秒:

9120/60000 [===>..........................] - ETA: 2s - loss: 0.7055 - acc: 0.7535

当我添加 steps_per_epoch 参数时,预计到达时间会增加到 5 小时,训练速度变得非常慢:

5/60000 [..............................] - ETA: 5:50:00 - loss: 1.9749 - acc: 0.3437

这是可重现的脚本:

import tensorflow as tf
from tensorflow import keras
import time

print(tf.__version__)


def get_model():
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model


(train_images, train_labels), (test_images, test_labels) = keras.datasets.fashion_mnist.load_data()
train_images = train_images / 255.0

model = get_model()

# Very quick - 2 seconds
start = time.time()
model.fit(train_images, train_labels, epochs=1)
end = time.time()
print("{} seconds", end - start)

model = get_model()

# Very slow - 5 hours
start = time.time()
model.fit(train_images, train_labels, epochs=1, steps_per_epoch=len(train_images))
end = time.time()
print("{} seconds", end - start)

我也尝试过使用纯 Keras,但问题仍然存在。我使用 1.12.0 版本的 Tensorflow、python 3 和 Ubuntu 18.04.1 LTS。

为什么 steps_per_epoch 参数会导致如此显着的速度下降,我该如何避免这种情况?

谢谢!

最佳答案

请注意,您正在对一组数据使用 fit。您没有使用 fit_generator 或使用任何生成器。

除非您有非常规的想法,否则使用 steps_per_epoch 是没有意义的。

fit 中的默认批量大小为 32,这意味着您正在使用 60000//32 = 1875 每个时期的步数进行训练。

如果您使用这个数字 1875,您将训练与默认 None 相同数量的批处理。如果您使用 60000 步,您将一个纪元乘以 32。(由于速度的巨大差异,我想说在这种情况下默认批处理大小也发生了变化)


没有步骤的拟合输出中显示的总数是图像总数。请注意已完成项目的数量如何以 32 的倍数增长。

使用steps时显示的总数就是步数。请注意已完成的步数如何以 1 1 的速度增长。

关于python - 使用 steps_per_epoch 参数时,Keras 的训练速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54634884/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com