ValueError: 输入0与层conv1d_1不兼容:期望ndim=3,但发现ndim=4

我正在使用Keras提供的conv1d层构建一个序列数据的预测模型。我是这样做的

model= Sequential()model.add(Conv1D(60,32, strides=1, activation='relu',padding='causal',input_shape=(None,64,1)))model.add(Conv1D(80,10, strides=1, activation='relu',padding='causal'))model.add(Dropout(0.25))model.add(Conv1D(100,5, strides=1, activation='relu',padding='causal'))model.add(MaxPooling1D(1))model.add(Dropout(0.25))model.add(Dense(300,activation='relu'))model.add(Dense(1,activation='relu'))print(model.summary())

然而,调试信息显示

Traceback (most recent call last):File "processing_2a_1.py", line 96, in <module>model.add(Conv1D(60,32, strides=1, activation='relu',padding='causal',input_shape=(None,64,1)))File "build/bdist.linux-x86_64/egg/keras/models.py", line 442, in addFile "build/bdist.linux-x86_64/egg/keras/engine/topology.py", line 558, in __call__File "build/bdist.linux-x86_64/egg/keras/engine/topology.py", line 457, in assert_input_compatibilityValueError: Input 0 is incompatible with layer conv1d_1: expected ndim=3, found ndim=4

训练数据和验证数据的形状如下

('X_train shape ', (1496000, 64, 1))('Y_train shape ', (1496000, 1))('X_val shape ', (374000, 64, 1))('Y_val shape ', (374000, 1))

我认为第一层的input_shape设置不正确。应该如何设置呢?


更新:在使用input_shape=(64,1)后,即使模型摘要能够运行,我得到了以下错误信息

________________________________________________________________Layer (type)                 Output Shape              Param #=================================================================conv1d_1 (Conv1D)            (None, 64, 60)            1980_________________________________________________________________conv1d_2 (Conv1D)            (None, 64, 80)            48080_________________________________________________________________dropout_1 (Dropout)          (None, 64, 80)            0_________________________________________________________________conv1d_3 (Conv1D)            (None, 64, 100)           40100_________________________________________________________________max_pooling1d_1 (MaxPooling1 (None, 64, 100)           0_________________________________________________________________dropout_2 (Dropout)          (None, 64, 100)           0_________________________________________________________________dense_1 (Dense)              (None, 64, 300)           30300_________________________________________________________________dense_2 (Dense)              (None, 64, 1)             301=================================================================Total params: 120,761Trainable params: 120,761Non-trainable params: 0_________________________________________________________________NoneTraceback (most recent call last):  File "processing_2a_1.py", line 125, in <module>    history=model.fit(X_train, Y_train, batch_size=batch_size, validation_data=(X_val,Y_val), epochs=nr_of_epochs,verbose=2)  File "build/bdist.linux-x86_64/egg/keras/models.py", line 871, in fit  File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 1524, in fit  File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 1382, in _standardize_user_data  File "build/bdist.linux-x86_64/egg/keras/engine/training.py", line 132, in _standardize_input_dataValueError: Error when checking target: expected dense_2 to have 3 dimensions, but got array with shape (1496000, 1)

回答:

你应该将input_shape更改为

input_shape=(64,1)

… 或者使用batch_input_shape

batch_input_shape=(None, 64, 1)

这个讨论详细解释了Keras中两者的区别。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注