输入0与图层flatten_15不兼容:预期min_ndim = 3,发现ndim = 2

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入0与图层flatten_15不兼容:预期min_ndim = 3,发现ndim = 2相关的知识,希望对你有一定的参考价值。

我正在尝试在我的声音数据集上训练ANN模型,该数据集有320行和50列,同时运行此代码:

Model= Sequential([ Flatten(), 
     Dense(16, input_shape=(1,50), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(2, activation='softmax' ) , 
     ])
Model.compile(Adam(lr=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Model.fit(S_T_S, T_L, validation_split=0.1, batch_size=20, epochs=20, shuffle='true', verbose=2)

我收到的错误是:

输入0与图层flatten_15不兼容:预期min_ndim = 3,发现ndim = 2,

答案

如果数据集具有(N,C)形状,其中N是数据点的数量,C是单个数据点的通道数,则第一层的input_shape参数应仅指定通道。

model= Sequential([
     Dense(16, input_shape=(50,), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(2, activation='softmax' ) , 
     ])
model.compile(Adam(lr=0.0001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(S_T_S, T_L, validation_split=0.1, batch_size=20, epochs=20, shuffle='true', verbose=2)

如果输出类的数量是2,那么具有一个节点的输出层可以比使用具有两个节点的输出层更好地工作。在这种情况下,输出层的激活应该改为sigmoid,损失应该改为二进制交叉熵。

model= Sequential([
     Dense(16, input_shape=(50,), activation= 'relu' ) , 

     Dense(32, activation= 'relu' ),
     Dense(1, activation='sigmoid' ) , 
     ])
model.compile(Adam(lr=0.0001), loss='sparse_binary_crossentropy', metrics=['accuracy'])

以上是关于输入0与图层flatten_15不兼容:预期min_ndim = 3,发现ndim = 2的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:层顺序的输入 0 与层不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:[8, 28, 28]

ValueError: 层 lstm_21 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:(无,546)

ValueError:conv2d 层的输入 0 与层不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:(256、256、256)

ValueError:输入 0 与层 lstm_13 不兼容:预期 ndim=3,发现 ndim=4

ValueError:输入 0 与层 lstm_1 不兼容:预期 ndim=3,发现 ndim=2 [keras]

如何修复'ValueError:输入0与层simple_rnn_1不兼容:预期形状=(无,无,20),找到形状=(无,无,2,20)'