【问题标题】:Error when checking target: expected dense_3 to have 2 dimensions, but got array with shape (10, 10, 2)检查目标时出错:预期 dense_3 有 2 个维度,但得到了形状为 (10, 10, 2) 的数组
【发布时间】:2019-04-06 22:22:56
【问题描述】:

我有形状为(n,128,128,3) 的 128x128 RGB 图像,带有(n,10,2) 形状的标签。 这是我的神经网络代码:

from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import InputLayer
from tensorflow.python.keras.layers import  MaxPooling2D
from tensorflow.python.keras.layers import Conv2D, Dense, Flatten
from tensorflow.python.keras.optimizers import Adam

from data_gen import gen_dataset
data, labels = gen_dataset(10)
test_data, test_labels = gen_dataset(10)

model = Sequential()

print(data.shape) # (10, 128, 128, 3)
print(labels.shape) # (10, 10, 2)

model.add(InputLayer(input_shape=(128, 128, 3)))
model.add(Conv2D(kernel_size=5, strides=1, filters=32, padding='same', activation='relu', name='conv1'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Conv2D(kernel_size=5, strides=1, filters=64, padding='same', activation='relu', name='conv2'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Conv2D(kernel_size=5, strides=1, filters=64, padding='same', activation='relu', name='conv3'))
model.add(MaxPooling2D(pool_size=2, strides=2))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(2, activation='softmax'))

optimizer = Adam(lr=1e-3)

model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x=data, y=labels, epochs=5, batch_size=5)
result = model.evaluate(x=test_data, y=test_labels)
print('\n\nAccuracy:', result[1])

如果我运行它,我会收到错误 ValueError: Error when checking target: expected dense_3 to have 2 dimensions, but got array with shape (10, 10, 2)

我知道有类似的问题,但这些问题并没有回答我的问题。 我尝试改变第一个 Dense Layer 神经元计数,尝试添加更多最大池和卷积层,但都没有成功。

【问题讨论】:

  • 标签的尺寸必须是(n,2)
  • 单个标签包含 10 个 (x,y) 坐标,因此形状为 (n, 10, 2)。我应该展平标签吗?

标签: python tensorflow machine-learning neural-network conv-neural-network


【解决方案1】:

错误在这一行:

model.add(Dense(2, activation='softmax')) 

应该是:

model.add(Dense(10, activation='softmax'))

原因

因为你有十个班。

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2019-01-03
    • 2021-06-30
    • 2019-03-25
    相关资源
    最近更新 更多