tf.keras model.fit (): огромная разница между потерей поезда и потерей val на тех же данных - PullRequest
0 голосов
/ 03 февраля 2020

Tensorflow версия 2.1

См. Блокнот colab, чтобы воспроизвести проблему: https://drive.google.com/file/d/1Fvc6G_9v5mek015cai7qYT6HoY-fLkzk/view?usp=sharing

Когда потеря обучения снижается, val_loss не изменяется, хотя это это точно такие же данные.

Тренировка на 2 выборках, проверка на 2 выборках
Эпоха 1/30 2/2 [=============== ===============] - 3 с - 2 с / выборка - потеря: 0,4630 - val_loss: 302,4763
эпоха 2/30 2/2 [========= =====================] -1s - 457ms / sample - потеря: 0.8565 - val_loss: 496.9578
Epoch 3/30 2/2 [=== ===========================] - 1 с - 457 мс / выборка - потеря: 0,7886 - val_loss: 1050,9148
эпоха 4/30 2 / 2 [==============================] - 1 с - 450 мс / выборка - потеря: 0,1080 - val_loss: 744,4895
Epoch 5/30 2/2 [====================================] - 1 с - 474 мс / выборка - потеря: 0,1144 - val_loss: 1353.2678
Epoch 6/30 2/2 [=============================] - 1 с - 465 мс / sample - потеря: 0.0402 - val_loss: 3237.9683
Epoch 7/30 2/2 [=================================== =] - 1с - 465 мсек / выборка - потеря: 0,0635 - val_loss: 3946,7822
Epoch 8/30 2/2 [========================== ===] - 1 с - 470 мс / выборка - потеря: 0,0355 - val_loss: 4054,5461
Epoch 9/30 2/2 [===================== =========] - 1 с - 462 мс / выборка - потери: 0,0345 - val_loss: 4991,5400

Как это возможно? Код довольно прост:

ResNet18, preprocess_input = Classifiers.get('resnet18')
base_model = ResNet18(input_shape=(180, 320, 3), weights=None, include_top=False)
x = tf.keras.layers.GlobalAveragePooling2D()(base_model.output)
output = tf.keras.layers.Dense(8)(x)
model = tf.keras.models.Model(inputs=base_model.input, outputs=output)
model.compile(optimizer='adam', loss='mse')
data = np.random.rand(2, 180, 320, 3)
labels = np.random.rand(2, 8)

model.fit(data, labels, validation_data=(data,labels), batch_size=2, epochs=30)

Известны проблемы с keras и пакетной нормализацией (см., Например, keras-team / keras # 6977). Это, вероятно, связано, но я не вижу, как именно. Что мне нужно изменить, чтобы это работало как положено? Это что-то во включенном пакете https://github.com/qubvel/classification_models или где его решить?

Редактировать: поведение пакетной нормализации изменено с TF 2.0, поэтому другие проблемы могут быть не связаны см. https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization

1 Ответ

0 голосов
/ 03 февраля 2020

Вы не обработали данные до диапазона, ожидаемого моделью. Эта модель содержит BatchNormalization, поэтому вы не можете использовать данные, которые не находятся в правильном диапазоне.

Вам необходимо использовать preprocess_input во всех ваших данных, и, конечно, ваш начальный диапазон должен быть от 0 до 255, как для изображений.

В идеале вы должны использовать реальные изображения, чтобы у вас был похожий дистрибутив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...