【发布时间】:2020-06-08 16:19:11
【问题描述】:
我收到此错误:
ValueError: 检查输入时出错:预期 conv1d_57_input 有 3 个维度,但得到的数组形状为 (152, 64)。
我的代码:
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(152,64)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(4, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(trainingMatrix, labelTraining, validation_data=(validationMatrix, labelValidation), epochs=3)
变量描述:
trainingMatrix.shape = (152,64); 行与具有特征的样本和列相关联。
是重塑问题吗?
编辑:
我做了以下更改:
trainingMatrix = np.expand_dims(trainingMatrix, axis=3)
validationMatrix = np.expand_dims(validationMatrix, axis=3)
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(64,1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(4, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(trainingMatrix, labelTraining, validation_data=(validationMatrix, labelValidation), epochs=3)
我收到这个新错误:检查目标时出错:预期 dense_28 的形状为 (1,) 但得到的数组的形状为 (4,)
我的总结:
_________________________________________________________________
Layer (type) Output Shape Param
=================================================================
conv1d_51 (Conv1D) (None, 62, 64) 256
_________________________________________________________________
conv1d_52 (Conv1D) (None, 60, 64) 12352
_________________________________________________________________
dropout_15 (Dropout) (None, 60, 64) 0
_________________________________________________________________
max_pooling1d_15 (MaxPooling (None, 30, 64) 0
_________________________________________________________________
flatten_16 (Flatten) (None, 1920) 0
_________________________________________________________________
dense_27 (Dense) (None, 100) 192100
_________________________________________________________________
dense_28 (Dense) (None, 4) 404
=================================================================
Total params: 205,112
Trainable params: 205,112
Non-trainable params: 0
新代码和新错误:
trainingMatrix = np.expand_dims(trainingMatrix, axis=0)
validationMatrix = np.expand_dims(validationMatrix, axis=0)
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(152,64,1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(4, activation='softmax'))
model.summary()
ValueError: Input 0 is in compatible with layer conv1d_57: expected ndim=3, found ndim=4
下面的方案可行,但命中率太低。有没有人推荐一个配置来改进?我没有达到超过 20% 的准确率。 (使用 MLP 我得到了 90%)
trainingMatrix = np.expand_dims(trainingMatrix, axis=3)
validationMatrix = np.expand_dims(validationMatrix, axis=3)
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(64,1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(4, activation='softmax'))
model.summary()
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
history = model.fit(trainingMatrix, labelTraining, validation_data=(validationMatrix, labelValidation), epochs=1000)
我的 labelTraining 是:
1 0 0 0
1 0 0 0
...
0 1 0 0
0 1 0 0
...
0 0 0 1
还好吗?
【问题讨论】:
-
152你的样本数对吗?在这种情况下,将您的输入形状更改为input_shape=(64,)。您不应该提供输入形状的样本数量,Keras 会自动获取它。 -
您是否尝试过重塑为 152,64,1 或 1,152,64?
-
@VivekMehta 我按照您的建议更改了代码,但出现其他错误:输入 0 与 conv1d_1 层不兼容:预期 ndim=3,发现 ndim=2
-
@3NiGMa 在这两种情况下我都会收到此错误:输入 0 与 conv1d_6 层不兼容:预期 ndim=3,发现 ndim=4
标签: python keras conv-neural-network