Потери всегда уходят в нан при передаче обучения ResNet50 в кера - PullRequest
0 голосов
/ 04 июня 2018

Я использую трансферное обучение для обучения классификатора изображения по ResNet50 модели в Keras и загрузке предварительно обученных весов, но loss сразу и сразу переходит к nan, а acc остаетсяна случайном уровне.

На самом деле, я не знаю, что не так, потому что я использовал эту модель для успешного обучения классификатора, хотя она не была с высокой acc, но она работает хорошо.На этот раз это не удалось.

Я настроил lr, но ничего не произошло.Кто-то сказал, что у данных могут быть проблемы, поэтому я изменил данные, и только для разных изображений одна и та же модель будет показывать разные результаты (то есть некоторые данные / изображения работают хорошо, а другие данные / изображения будут мгновенно показывать loss:nan).Как это может быть?Я действительно смущен и не могу понять, что не так с моими изображениями.

Набор данных: 8 классов, и каждый класс содержит около 300 изображений.

Вот код для всех:

import keras
import h5py
import numpy as np
import matplotlib.pyplot as plt

from keras.applications import ResNet50
from keras.models import Sequential
from keras.layers import Dense, Flatten, GlobalAveragePooling2D
from keras.applications.resnet50 import preprocess_input
from keras.preprocessing.image import ImageDataGenerator


data_generator = ImageDataGenerator(preprocessing_function= preprocess_input, 
                        rescale = 1./255)

train_generator = data_generator.flow_from_directory("image/train", 
                        target_size = (100, 100), 
                        batch_size = 32, 
                        class_mode = "categorical")
dev_generator = data_generator.flow_from_directory("image/dev", 
                        target_size = (100, 100), 
                        batch_size = 32, 
                        class_mode = "categorical")

num_classes = 8
model = Sequential()
model.add(ResNet50(include_top = False, pooling = "avg", weights= "resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5"))
model.add(Dense(num_classes, activation = "softmax"))
model.layers[0].trainable = False

model.compile(optimizer= "adam", loss= "categorical_crossentropy", metrics=["accuracy"])

model.fit_generator(train_generator, steps_per_epoch= 1, epochs = 1)

и текущий вывод:

Epoch 1/1
1/1 [==============================] - 6s 6s/step - loss: nan - acc: 0.0938

1 Ответ

0 голосов
/ 04 июня 2018

Первое исправление “image/dev” до "image/dev"

Я думаю, что ваша ошибка лежит в этой строке:

data_generator = ImageDataGenerator(preprocessing_function= preprocess_input, rescale = 1./255)

вы дважды масштабируете свои данные, когда используете оба параметра preprocess_inputфункция и rescale = 1./255.Попробуйте удалить масштабирование ...

data_generator = ImageDataGenerator(preprocessing_function= preprocess_input)
...