今天我尝试使用 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
。
添加回答
举报
0/150
提交
取消