【问题标题】:Input 0 is incompatible with layer flatten_15: expected min_ndim=3, found ndim=2输入 0 与 flatten_15 层不兼容:预期 min_ndim=3,发现 ndim=2
【发布时间】:2019-07-13 17:38:36
【问题描述】:

我正在尝试在我的声音数据集上训练 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,

【问题讨论】:

  • Flatten 层是不必要的。如果你有 (320, 50) 数组,你可以直接将它传递给密集层。
  • 我做了,但随后出现错误:检查输入时出错:预期的 dense_54_input 具有 3 个维度,但得到了形状为 (19500, 1) 的数组

标签: python keras flatten sequential


【解决方案1】:

如果数据集具有 (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'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    • 2022-08-15
    • 2019-06-04
    相关资源
    最近更新 更多