Keras ValueError:登录和标签必须具有相同的形状

Keras ValueError:登录和标签必须具有相同的形状,keras,neural-network,classification,Keras,Neural Network,Classification,我在Keras中有一个多层感知器网络,有两个隐藏层 在尝试训练网络时,我在fit_生成器中得到错误: 错误: ValueError:登录和标签必须具有相同的形状((无,2)与(无,1)) 我的代码是: 将numpy导入为np 进口干酪 从keras导入图层 从keras导入顺序 #定义窗口大小(彩色图像) img_窗口=(32,32,3) #展平窗户形状 输入形状=np.prod(img\U窗口) 打印(输入图形) #定义具有两个隐藏层(神经元)的MLP simpleMLP=顺序( [la

我在Keras中有一个多层感知器网络,有两个隐藏层

  • 在尝试训练网络时,我在fit_生成器中得到错误:

  • 错误: ValueError:登录和标签必须具有相同的形状((无,2)与(无,1))

    我的代码是:
    将numpy导入为np
    进口干酪
    从keras导入图层
    从keras导入顺序
    #定义窗口大小(彩色图像)
    img_窗口=(32,32,3)
    #展平窗户形状
    输入形状=np.prod(img\U窗口)
    打印(输入图形)
    #定义具有两个隐藏层(神经元)的MLP
    simpleMLP=顺序(
    [layers.Input(shape=img_窗口),
    layers.flatte(),#将输入conv2D展平为1个向量,这不会影响批量大小。
    密集层(输入_shape//2,activation=“relu”),
    密集层(输入_shape//2,activation=“relu”),
    致密层(2,活化=“S形”),
    ]
    )
    #“构建”模型后,调用其summary()方法以显示其内容
    simpleMLP.summary()
    #初始化
    #批量数据的大小,取决于RAM的调整
    批量大小=128
    纪元=5
    #使用3个参数编译MLP模型:损失函数、优化器和度量函数来判断模型性能
    compile(loss=“binary\u crossentropy”,optimizer=“adam”,metrics=[“binary\u accurity”])\BCE
    #创建ImagedataGenerator以拆分培训、验证数据集
    从keras.preprocessing.image导入ImageDataGenerator
    列车方向=“/content/train”
    列车\数据发生器=图像数据发生器(
    重缩放=1./255,#重缩放因子
    剪切范围=0.1,
    缩放范围=0.1,
    水平翻转=真,
    填充模式(最近的)
    valid_dir='/content/valid'
    有效的\u datagen=ImageDataGenerator(
    重新缩放=1./255,
    剪切范围=0.1,
    缩放范围=0.1,
    水平翻转=真,
    填充模式(最近的)
    train_generator=来自目录的train_datagen.flow_(
    列车主任,
    目标大小=img\u窗口[:2],
    批次大小=批次大小,
    class_mode='binary',
    颜色模式='rgb'
    )
    验证\u生成器=来自\u目录的有效\u datagen.flow\u(
    有效地址:,
    目标大小=img\u窗口[:2],
    批次大小=批次大小,
    class_mode='binary',
    颜色(模式为rgb)
    #训练MLP模型
    simpleMLP.fit_生成器((
    列车发电机,
    每历元步数=8271//批量大小,
    纪元=5,
    验证数据=验证生成器,
    验证步骤=2072//批量大小)
    

    你能告诉我如何解决这个问题吗?提前谢谢。

    你的问题很简单,你有形状
    (N,1)
    的标签和定义为
    二进制交叉熵
    的损失。这意味着你应该在最后一层有一个输出节点。但是你有一个输出两个类的模型

    simpleMLP = Sequential(
        [...
         layers.Dense(2,activation="sigmoid"),
         ]
    )
    
    只需将此更改为

    simpleMLP = Sequential(
        [...
         layers.Dense(1,activation="sigmoid"),
         ]
    )