我的 Keras CNN 返回相同的输出值,我该如何修复/改进我的代码

0nroth1

我创建了一个代码来训练我的 CNN,它将确定图像是一个类还是另一个类(“pdr 或 nonPdr”)

这是我的 keras 模型:

model = Sequential()
model.add(Conv2D(input_shape=(605,700,3), filters=64, kernel_size=(3,3), padding="same",activation="tanh"))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(32, activation='tanh', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

data, labels = ReadImages(TRAIN_DIR)

model.fit(np.array(data), np.array(labels), epochs=10, batch_size=16)

model.save('model.h5')

这是我的 test_predict 文件:

model = load_model('model.h5')

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

test_image = cv2.imread("test_data/im0203.ppm") 
test_image = test_image.reshape(1,605,700,3).astype('float')
test_image = np.array(test_image)

test_image2 = cv2.imread("test_data/im0001.ppm") 
test_image2 = test_image2.reshape(1,605,700,3).astype('float')

#predict the result
print(model.predict(test_image))
print(model.predict(test_image2))

运行下面的代码后,我的 2 个图像得到相同的值(不同,一个是 pdr,另一个是 nonPdr)

[[0.033681]]
[[0.033681]]

我该如何修复它并改进我的 CNN。我感谢您的帮助。

更新我尝试删除一个密集层并更改 (2, activation='sigmoid') 中的最后一个但它也不起作用..我真的不知道该怎么做**

普拉文·库马尔

这可能是由于多种原因。最靠谱的是:

  1. 输入到网络的输入和预测期间输入的图像可能没有相同的预处理步骤。

  2. 该模型过度拟合,当它发现预测图像略有不同时,它往往会根据其训练来偏向其决策。

  3. 模型不好

为避免此类并发症,未来可能的解决方案可能是: 1. 尝试仅在训练和测试期间提供标准化或缩放的图像。

  1. 不要使用太多的 Dense 层(特别是用于图像分类),因为密集层擅长学习空间信息,并且为了正确分类图像,模型需要在 2d 矩阵而不是 1d 空间矩阵中查看图像(因为密集层会变平2d 矩阵到 1d 矩阵)。

即使您尝试使用密集层,我也建议仅在最后一层使用密集层,它用于最后的 number_of_classes 层。更好的架构是

[ Conv 后跟几个转换块和瓶颈层 ] x 2 展平 Dense(number_of_classes)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Keras ImageDataGenerator:为什么我的CNN的输出颠倒了?

我的CNN Keras预测不正确,我也不知道该怎么办

我该怎么做才能提高CNN Keras的96%(f分数)?

我该怎么做才能改善Keras CNN VGG16模型

我在 keras 实现的 CNN 优化(学习)中出错,但我不知道解决方案

在MNIST数据集上训练后如何在keras中使用cnn预测我自己的图像

为什么我的 Keras TimeDistributed CNN + LSTM 模型期望形状不完整

如何改进我的CNN?高且恒定的验证错误

为什么我的Keras CNN总是猜一个数字?为什么我的损失这么高?

我以什么顺序训练CNN

从 CNN Keras 提取迁移学习输出

用LIME解释CNN(Keras)的输出

Keras训练CNN-我应该将热图数据转换为图像还是2D矩阵

为什么我的用于糖尿病视网膜病变检测的 Keras CNN 根本不起作用

Keras:如何串联两个CNN?

如何使用 CNN 修复欠拟合/为什么我的代码不能正确识别图像?

我如何让这个 CNN 检测 RGB 图像?

如何使用图像测试我的 CNN 模型?

如何可视化我的回归类型 CNN 的输出?

要求对我的CNN学习模型提出改进建议?

我该如何改进?

有人可以看看我的 Keras CNN 模型并帮助我确定提高训练和验证准确性的方法吗?

我的代码的复杂程度如何,我该如何改进?

为什么我的CNN过度拟合,我该如何解决?

过度拟合我的模型分类图像 CNN

我应该使用 CNN 还是 RNN?

如何纠正/改进我的 CNN 模型?如何处理验证精度冻结问题?

Keras CNN参数太少

Keras CNN尺寸问题