Keras CNN для преобразования изображения, потеря NAN - PullRequest
0 голосов
/ 17 февраля 2020

Я пишу CNN для преобразования изображения (обычно выполняется с помощью преобразования Фурье и набора параметров)

У меня проблемы с функцией потери, возвращающей NAN с первой эпохи, я пытался изменить мои оптимизаторы, регулировка скорости обучения, добавление отсева и нормализация партии, изменение дизайна моей модели, но, похоже, ничего не работает.

Я также гарантирую, что в моих данных нет нана инфы. Мой набор данных содержит большое количество нулей, поэтому я не уверен, влияет ли это на него. Я нормализовал данные так, чтобы они находились в диапазоне [0,1]

, даже если я упростил его, чтобы иметь только этот слой, потери сразу равны (# channel = 1, размер изображения 1024x1024):

model.add(Conv2D(1, 1 , activation = 'relu', input_shape = (1,1024, 1024),
                 kernel_regularizer=regularizers.l2(0.01),
                 bias_regularizer=regularizers.l2(0.01))) 

opt = Adagrad(learning_rate = 0.0001, clipvalue = .5)
model.compile(optimizer = opt, loss = 'mean_squared_error',
          metrics= ['acc', 'mse'])

history = model.fit_generator(generator=training_generator,
                steps_per_epoch = 30, verbose = 2,
                epochs = 20)

Я использую свой собственный генератор для подачи пакетов данных изображения в модель. В настоящее время я использую размер пакета только 2.

В настоящее время вывод просто:

    Epoch 1/20
    - 62s - loss: nan - acc: 0.2009 - mse: nan
    Epoch 2/20
   - 61s - loss: nan - acc: 0.2007 - mse: nan
   Epoch 3/20
   - 62s - loss: 9.5592 - acc: 0.1675 - mse: 0.2778
   Epoch 4/20
   - 61s - loss: nan - acc: 0.2340 - mse: nan
   Epoch 5/20
   - 61s - loss: nan - acc: 0.1172 - mse: nan
   Epoch 6/20
   - 61s - loss: nan - acc: 0.1173 - mse: nan

и т. Д.

Проблема, которую я пытаюсь смоделировать Я преобразовываю изображение в голограмму с использованием преобразования Фурье и фазового сдвига, выходное изображение должно иметь те же размеры, что и входное (1, 1024, 1024)

Любая помощь или понимание будет высоко ценится, может быть, я просто пропустить очень очевидный шаг!

1 Ответ

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

Я думаю, что ваша проблема возникла из-за того, как вы определили свою модель:

  • Вы используете потерю mean_squarred_error, поэтому вы вычисляете среднеквадратичную ошибку каждого пикселя на вашем изображении!
  • Кроме того, вы используете relu-активацию, поэтому ваша модель может прогнозировать значения от 0 до inf.
  • Сочетание этих двух точек: изображение 1024 * 1024 со средней ошибкой 50 делает ваш убыток настолько большим, что он становится равным NaN.

Дайте нам больше информации о том, кто вы есть пытаясь предсказать, если вам нужна дополнительная помощь в отношении того, какой тип активации / потери используется!

...