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

今天我尝试使用 fit_generator 函数对纯黑白图像进行二进制分类,但它只给了我 50% 的准确率


这只是我的编码练习,但我认为准确率应该达到 100%。所以我很好奇我的错误是什么。


我在 Google-colaboratory 中完成所有代码。


这是我的代码。


设置


import numpy as np

import random

from matplotlib import pyplot as plt


img_height = 150

img_width = 150

batch_size = 8


class 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()


慕后森
浏览 464回答 1
1回答

互换的青春

问题出在模型定义的末尾,特别是在这里: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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python