【问题标题】:expected dense_1 to have shape (1,) but got array with shape (2,)预期dense_1 的形状为(1,) 但得到的数组形状为(2,)
【发布时间】:2019-05-09 07:50:47
【问题描述】:

我收到此错误:

ValueError: Error when checking target: expected dense_1 to have shape (1,) but got array with shape (2,)

当我跑步时:

num_classes = 2
model = keras.Sequential()

model.add(keras.layers.InputLayer(input_shape=[64,64,1]))
model.add(keras.layers.Conv2D(filters = 32, kernel_size=5, strides=1, padding ='same', activation='relu'))
model.add(keras.layers.MaxPooling2D(pool_size=5, padding='same'))

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512, activation='relu'))
model.add(keras.layers.Dense(num_classes, activation='softmax'))
#model.summary()

#Compile and train the model
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x = tr_img, y = tr_lbl, epochs=2, batch_size = 5)

我的输入(图像)数据存储在一个 numpy 数组中,形状为:(300, 64, 64, 1)

我的标签有形状:(300, 2) 并且是一种热门格式,如下所示:[0,1]...

我该如何解决?

【问题讨论】:

  • sparse_categorical_crossentropy 不要求类别编码为整数,而不是热编码?
  • categorical_crossentropy 用于您的loss 函数。 sparse_categorical_crossentropy 用于当您的目标是整数,而不是one-hot-encoded
  • keras.layers.InputLayer(input_shape=[64,64,1] 中,您的input_shape 应该是tuple (64,64,1),而不是列表
  • @RezaBehzadpour 如果你愿意,你可以使用一个列表。不必是一个元组

标签: python-2.7 numpy tensorflow keras


【解决方案1】:

问题在于您的损失函数。如果您使用的是带有 one-hot-encoded 标签的 softmax 输出,则应该使用 loss='binary_crossentropy'loss='categorical_crossentropy'

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2020-03-28
    相关资源
    最近更新 更多