ValueError:检查时出错:预期dense_1_input的形状为(3,),但得到的数组形状为(1,)

Posted

技术标签:

【中文标题】ValueError:检查时出错:预期dense_1_input的形状为(3,),但得到的数组形状为(1,)【英文标题】:ValueError: Error when checking : expected dense_1_input to have shape (3,) but got array with shape (1,) 【发布时间】:2018-10-24 10:56:09 【问题描述】:

我正在尝试使用学习到的 .h5 文件进行预测。 学习模型如下。

model =Sequential()
model.add(Dense(12, input_dim=3, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(4, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])

我把输入的形式写成如下。

x = np.array([[band1_input[input_cols_loop][input_rows_loop]],[band2_input[input_cols_loop][input_rows_loop]],[band3_input[input_cols_loop][input_rows_loop]]])

prediction_prob = model.predict(x)

我以为形状是正确的,但出现了以下错误。

ValueError: 检查时出错:预期dense_1_input 的形状为(3,),但得到的数组的形状为(1,)

x的形状明显是(3,1),但是上面的错误并没有消失(数据来自(value 1, value 2, value 3, class)形式的csv文件)。

我该如何解决这个问题?

【问题讨论】:

第一层应该是model.add(Dense(12, input_shape=(3,1), activation='relu')) 但是为什么要把输入读成 (1,) 呢? 【参考方案1】:

x的形状明显是(3,1),但是上面的错误还在继续。

你是对的,但这 不是 keras 所期望的。它期望(1, 3) 形状:按照惯例,轴 0 表示批量大小,轴 1 表示特征。第一个 Dense 层接受 3 个特征,这就是为什么它只看到一个时会报错。

解决办法就是转置x

【讨论】:

最终我用您的建议解决了这个问题。下面是修改后的数组。 np.array([band1_input[input_cols_loop][input_rows_loop],band2_input[input_cols_loop][input_rows_loop],band3_input[input_cols_loop][input_rows_loop]])

以上是关于ValueError:检查时出错:预期dense_1_input的形状为(3,),但得到的数组形状为(1,)的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:检查目标时出错:预期dense_6的形状为(46,),但数组的形状为(1,)

ValueError:检查目标时出错:预期dense_4的形状为(4,)但得到的数组形状为(1,)

ValueError:检查目标时出错:预期dense_3的形状为(1,)但得到的数组形状为(2,)

ValueError:检查输入时出错:预期的dense_26_input具有形状(45781,)但得到的数组具有形状(2,)

ValueError:检查输入时出错:预期dense_11_input 具有3 维,但得到了形状为(0, 1) 的数组

ValueError:检查输入时出错:预期dense_1_input有2维,但得到了形状为(60000、28、28)的数组