Keras CNN的图像转换,NAN损失



我正在为图像变换(通常使用傅立叶变换和一组参数(编写CNN

我的损失函数从第一个时期返回NAN时遇到了问题,我尝试过更改我的优化器,调整学习率,添加丢弃和批量规范化,更改我的模型设计,但似乎什么都不起作用。

我还确保我的数据本身没有任何缺陷。我的数据集确实包含大量的零,所以我不确定这是否会影响它。我已经将数据标准化为[0,1]范围内

即使我将其简化为只有这一层,损失也很小(#通道=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

等等

我试图建模的问题是,使用傅立叶变换和相移将图像转换为全息图,输出图像应该与输入(10241024(具有相同的尺寸

任何帮助或见解都将不胜感激,也许我只是错过了一个非常明显的步骤!

我认为您的问题来自于您定义模型的方式:

  • 您使用的是mean_squared_error损失,因此您正在计算图像上每个像素的平方误差
  • 此外,您正在使用relu激活,因此您的模型可以预测0和inf之间的值
  • 这两个点组合在一起:1024*1024的图像,平均误差为50,会让你损失惨重,以至于变成NaN

如果您想获得更多关于使用何种激活/丢失的帮助,请提供更多关于您试图预测的内容的精确信息!

最新更新