python - ValueError:检查目标时出错:预期dense_1的形状为(16、1、2)但得到的数组形状为(2、1、1)
问题描述
我对使用机器学习和 keras 很陌生。这是我的第一个 CNN 模型。我建立了一个模型来将声音分类到 UrbanSound8kDataset 中。当我在一个小的虚拟集上运行模型时,我不断收到以下错误:
ValueError: Error when checking target: expected dense_1 to have shape (16, 1, 2) but got array with shape (2, 1, 1)
我查看了其他有类似问题的帖子,并尝试将模型损失更改为 sparse_categorical_crossentropy 而不是 categorical_crossentropy。我还在第一个密集层之前添加了 model.flatten() 。不幸的是,这些都没有解决我的错误。
这是我的模型的相关代码:
num_labels = yy.shape[1]
filter_size = 2
num_rows = 1
num_columns = 1
num_channels = 1
x_train = x_train.reshape(x_train.shape[0], num_rows, num_columns, num_channels)
y_train = y_train.reshape(y_train.shape[0], 2, num_columns, num_channels)
x_test = x_test.reshape(x_test.shape[0], 1, num_columns, num_channels)
y_test = y_test.reshape(y_test.shape[0], 2, num_columns, num_channels)
model = Sequential()
model.add(Conv2D(filters=16, kernel_size=2, input_shape=(num_rows,
num_columns, num_channels), activation='relu', data_format='channels_first', padding="same"))
model.add(MaxPooling2D(pool_size=1))
model.add(Dropout(0.2))
model.add(Conv2D(filters=32, kernel_size=1, activation='relu'))
model.add(MaxPooling2D(pool_size=1))
model.add(Dropout(0.2))
model.add(Conv2D(filters=64, kernel_size=1, activation='relu'))
model.add(MaxPooling2D(pool_size=1))
model.add(Dropout(0.2))
model.add(Conv2D(filters=64, kernel_size=1, activation='relu'))
model.add(MaxPooling2D(pool_size=1))
model.add(Dropout(0.2))
#Flatten layer here:
model.add(Dense(num_labels, activation='softmax'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
model.summary()
num_epochs = 100
num_batch_size = 132
start = datetime.now()
model.fit(x_train, y_train, batch_size=num_batch_size, epochs=num_epochs, validation_data=(x_test, y_test), verbose=1)
以下是模型摘要:
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 16, 1, 1) 80
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 16, 1, 1) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 16, 1, 1) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 16, 1, 32) 64
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 16, 1, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 16, 1, 32) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 16, 1, 64) 2112
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 16, 1, 64) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 16, 1, 64) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 16, 1, 64) 4160
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 16, 1, 64) 0
_________________________________________________________________
dropout_4 (Dropout) (None, 16, 1, 64) 0
_________________________________________________________________
dense_1 (Dense) (None, 16, 1, 2) 130
=================================================================
Total params: 6,546
Trainable params: 6,546
Non-trainable params: 0
____________________________
错误发生在我总结的代码的最后一行,model.fit 行。
如果我需要包含更多代码,请告诉我。这只是我第二次在这里发帖,所以我不确定要包含多少代码。
非常感谢!
解决方案
推荐阅读
- javascript - 为什么 Nuxt 不转译 vendor.app.js?
- r - 在 stringr 中使用 perl/regex 到上层 \U
- javascript - 如何突出显示替换文本的所有实例
- c# - 需要简单、强大的 c# 解决方案来动态解析和缩短 Uri 字符串
- d - 接口和模板函数
- r - 使用 rdrobust 包在 R 中使用协变量拟合回归不连续模型
- excel - VBA将日期和时间的列转为24小时(Excel)
- python-3.x - 计算两个熊猫列之间向量的余弦相似度?
- elasticsearch - 使用 logstash 解析 json 数组字符串
- docker - 将 Kubernetes pod 限制为一个进程