为了账号安全,请及时绑定邮箱和手机立即绑定

CNN 使用 Keras 进行简单的二元分类,但只有 50% 的准确率

CNN 使用 Keras 进行简单的二元分类,但只有 50% 的准确率

慕后森 2021-07-15 18:15:12
今天我尝试使用 fit_generator 函数对纯黑白图像进行二进制分类,但它只给了我 50% 的准确率这只是我的编码练习,但我认为准确率应该达到 100%。所以我很好奇我的错误是什么。我在 Google-colaboratory 中完成所有代码。这是我的代码。设置import numpy as npimport randomfrom matplotlib import pyplot as pltimg_height = 150img_width = 150batch_size = 8class MyDataset(object):    def __init__(self):        placeholder = 0    def generator(self):        is_black = True        X, y = [], []        while True:            if is_black:                img = np.full((img_height, img_width, 3), 255)            else:                img = np.zeros((img_height, img_width, 3))            img = img / 255.            X.append(img)            y.append(is_black)            is_black = not is_black            if len(X) >= batch_size:                c = list(zip(X, y))                random.shuffle(c)                X, y = zip(*c)                yield np.asarray(X, dtype=np.float32), np.asarray(y, dtype=np.float32)                X, y = [], []dataset = MyDataset()sample_gen = dataset.generator()
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

问题出在模型定义的末尾,特别是在这里:

model.add(tf.keras.layers.Dense(1, activation='softmax'))

通过应用 softmax,您 - 根据定义 - 强制其输出总和为 1。单个值如何遵守的唯一方法是成为 1 本身。因此,不会传播任何信息。

要修复它,请将 softmax 转换为逻辑 sigmoid,例如:

model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

这样,您还可以将模型的输出解释为数据来自 class 的后验概率1


查看完整回答
反对 回复 2021-07-27
  • 1 回答
  • 0 关注
  • 463 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信