Я заметил огромное снижение скорости модели обучения, когда я указываю аргумент steps_per_epoch
в методе model.fit(..)
.Когда я указываю steps_per_epoch
как None (или не использую его), ETA эпохи составляет 2 секунды подряд:
9120/60000 [===> ..........................] - ETA: 2 с - потеря: 0,7055 - в соответствии: 0,7535
Когда я добавляю аргумент steps_per_epoch
, ETA увеличиваетсядо 5 часов, и скорость тренировки становится чрезвычайно низкой:
5/60000 [..............................] - ETA: 5:50:00 - потеря: 1,9749 - согласно: 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)
Я также пробовал счистый керас и проблема сохранилась.Я использую 1.12.0
версию Tensorflow, Python 3 и Ubuntu 18.04.1 LTS.
Почему аргумент steps_per_epoch
вызывает столь значительное снижение скорости и как этого избежать?
Спасибо!