【问题标题】:How can I improve a biased CNN model performance ? (Keras, Tensorflow)如何提高有偏见的 CNN 模型性能? (Keras,张量流)
【发布时间】:2019-04-15 14:58:16
【问题描述】:

模型只为所有测试图像生成一个输出,尽管测试集具有所有可能的类。

我已经尝试过使用不同的优化器和损失函数。

model = tf.keras.models.Sequential([
    tf.keras.layers.Conv2D(64, (3, 3), input_shape=x.shape[1:], activation='relu'),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
model.fit(x, y, epochs=10, batch_size=32)

预期结果:预测给定图像的寄生或未感染样本。

实际结果:预测总是相同的类。所有图像都被寄生或所有图像未感染。

【问题讨论】:

  • 您需要添加更多详细信息,例如每个班级有多少张图片、图片大小等。
  • 你是如何测试分类器的?训练和验证的准确率是多少?

标签: python-3.x tensorflow machine-learning keras deep-learning


【解决方案1】:
tf.keras.layers.Dense(1, activation='sigmoid')

您也可以通过将其视为分类问题以另一种方式进行处理,因此您的代码应该像这样 tf.keras.layers.Dense(2, activation=' softmax') 并且损失应该是分类交叉熵。

问题:您的模型似乎是一个更简单的模型,它无法泛化数据以进行预测,而是使用预训练模型并在数据较少时使用特征提取和微调方法。希望这能帮助你好运:

【讨论】:

  • 不。当我们使用 sigmoid 函数时,神经元的数量为 1,因为它给出的值介于 0-1 之间。它主要用于二进制分类。 PS:我也试过这样做。
  • 我认为你应该在密集层和类数为 2 之后使用 softmax 作为激活函数
  • 您在回答中已经说过了,这是不正确的;对于二元分类问题,loss="binary_crossentropy"activation='sigmoid' 的组合是完全有效的,也是最常见的选择
猜你喜欢
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2019-11-27
  • 2021-12-24
  • 2017-05-31
相关资源
最近更新 更多