【问题标题】:Keras - CNN input shape incompatibleKeras - CNN 输入形状不兼容
【发布时间】:2018-11-02 13:25:32
【问题描述】:

我正在处理二进制分类,当我使用 CNN 时,我的代码在 Keras Lstm 上运行良好,但出现输入形状不兼容错误。

这是我得到的值错误

ValueError: 检查目标时出错:预期 dense_61 有 3 个维度,但得到的数组形状为 (24, 1)

这是我使用 keras 的 cnn 代码

model=Sequential()
inputBatch = inputBatch.reshape(24,30, 1)
model.add(Conv1D(64, 3, activation='relu', input_shape=(30, 1)))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(pool_size=4,strides=None, padding='valid'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(inputBatch,ponlabel,batch_size=24,epochs=20,validation_data=(inputBatch, ponlabel))

我正在研究二元分类,要么是正的,要么是负的

作为参考,这是我的 lstm 代码

inputBatch =inputBatch.reshape(24,30,1)
model=Sequential()
model.add(LSTM(50, input_shape=(30, 1)))
model.add(Dense(1, activation="relu"))
model.compile(loss='mean_absolute_error',optimizer='adam')
model.fit(inputBatch,ponlabel,batch_size=24,epochs=100,verbose=1)

inputBatch 是这样的,它适用于 LSTM 代码,但不适用于 CNN,这是我用于分别训练两个代码的输入

[[    0.  1288.  1288.  2214. 11266.  6923.   420.     0.     0.  8123.
      0.  7619.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.     0.     0.     0.     0.     0. 11516.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  9929. 11501.  6573. 11266.  7566.  9963.  4420. 10936.  3657.
   7050.     0.   408. 11501.  9988.  9963.  8455.  2879.  9322.  2047.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0. 11956.  5222.     0.     0. 12106.  6481.     0.  7093. 13756.
  12152.     0.     0.     0.     0. 10173.     0.  5173. 13756.  9371.
      0.  9956.     0.     0.  9716.     0.     0.     0.     0.     0.]
 [    0.     0.   420.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0. 11501.  1916.  2073. 10936.  6312.     0. 10193. 10322.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  2879.  7852. 11501.  1934.   286. 11483.     0. 12004. 11118.
      0. 12007.  9917. 12111.  1520. 10364.     0.  8840.  4195.  2910.
  10773. 11386. 12117.  9321.     0.     0.     0.     0.     0.     0.]
 [    0.  7885.  7171.  1034. 11501.  3103.  5842.  4395. 11871.  3328.
   6719.  5407.  1087.  8935.  2937.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  8894.   450. 11516.  7353. 11501. 11502. 11499.     0.  1319.
  11693. 11501.  5735. 12111.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  1087.  9565.    23.     0.  3045.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  5015. 11501.  3306. 12111.  9307.  5050. 11501.  3306.     0.
   3306. 12111.  1981. 11516.   615. 11516.     0.  3925. 11956.  9371.
   9013.  4395. 12111.  5048.     0.  3925.     0.     0.     0.     0.]
 [    0.  1287.   420.  4070. 11087.  7410. 12186.  2387. 12111.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.   128.  2073. 10936.  6312.     0. 10193. 10322.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0. 10173.  9435.  1320.  9322. 12018.  1055.  8840.  6684. 12051.
   2879.     0. 12018.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  1570.  5466.  9322.    34. 11480.  1356. 11270.   420.  2153.
  12006.  5157.  8840.  1055. 11516.  7387.  2356.  2163.  2879.  5541.
   9443.  7441.  1295.  5473.     0.     0.     0.     0.     0.     0.]
 [    0.  5014.     0.     0.  3651.  1087.    63.  6153.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0. 10608. 10855.  9562.     0.     0.     0.  4202.     0.     0.
      0. 10818. 10818.  5842.     0.  9963.     0. 11516. 10464.  7491.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  5952.  6133.   450.  7520.  5842.  3412. 10400.  3412.  2149.
   4891.  2979.  3456.   505.  9929. 11501.  9322.  1836. 11501. 12111.
   3435. 11105. 11266.   420.  9322.    34.     0.     0.     0.     0.]
 [    0.  1570.  5466.  9322.    34. 11480.  1356. 11270.   420.  2153.
  12006.  5157.  8840.  1055. 11516.  7387.  2356.  2163.  2879.  5541.
   9443.  7441.  1295.  5473.     0.     0.     0.     0.     0.     0.]
 [    0.  7544.     0.  1709.   420. 10936.  5222.  5842. 10407.  6937.
  11329.  2937.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  7785.  8840.     0.   420.  8603. 12003.  2879.  1087.  2356.
   2390. 12111.     0.     0.     0.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  8695.  8744.   420.  8840.  6697.  9267. 11516. 11203.  2260.
   8840.  7309.     0. 11100.  6041.     0.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.  9307. 12003.  2879.  6398.  9372.  4614.  5222.     0.     0.
   2879. 10364.  6923.  4709.  4860. 11871.     0.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]
 [    0.     0.  2844.  1287.   420. 11501.   610. 11501.   596.     0.
  12111.  3690.  6343.  9963.     0.     0.  8840.     0.     0.     0.
      0.     0.     0.     0.     0.     0.     0.     0.     0.     0.]]

【问题讨论】:

  • 能否也分享一下错误信息?
  • 是的,等待 ValueError:检查目标时出错:预期 dense_61 具有 3 个维度,但得到的数组形状为 (24, 1) @desa
  • ponlabel的形状是什么?
  • ponlabel的形状是(24, 1)

标签: python tensorflow keras


【解决方案1】:

问题在于输出形状,因为您使用的是 CNN,所以输出是 3D(样本、宽度、通道),而 Dense 层将在最后一个维度上进行操作,从而为您提供 3D 输出。但是你想要一个 2D 输出,所以你需要添加一个 Flatten 层:

model=Sequential()
model.add(Conv1D(64, 3, activation='relu', input_shape=(30, 1)))
model.add(Conv1D(64, 3, activation='relu'))
model.add(MaxPooling1D(pool_size=4,strides=None, padding='valid'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Conv1D(128, 3, activation='relu'))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))

你可以通过model.summary()来比较这个模型和你原始模型的输出形状

【讨论】:

  • 兄弟我提供了lstm代码供参考问题是cnn代码请阅读问题
  • @TayyabGulsherVohra 当然,但我不是你的兄弟。您对 CNN 也有同样的问题,让我更新一下问题。
  • 你能用CNN回答一下吗,对我理解会有帮助
  • 成功了。谢谢,我接受了我的 lstm 代码有什么问题吗?
  • 我认为你在最后一个 Dense 层之前还需要一个 Flatten 层。
【解决方案2】:

当输入图像大小不同时,可能会出现此类错误。

添加更多信息(我无法评论说,因为我没有足够的代表),可能包括完整的堆栈跟踪。

【讨论】:

  • 输入批次不是图像而是文本
  • 你可以查看
【解决方案3】:

输入形状不兼容是由于ponlabel。对于 LSTM,它的形状为 (24,1)。但是 CNN 使用binary_crossentropy 作为损失函数,所以它会有两个目标类。这意味着对于 CNN,ponlabels 需要具有形状 (24,2,1)。

【讨论】:

  • 我已经尝试了这两个示例我还重新调整了 ponlabel,同时重新调整它显示无法将 24 的错误大小调整为 (24,2,1),并且我还将损失函数更改为 MSE 或分类交叉熵都不起作用
【解决方案4】:

您需要使用 MSE 或分类交叉熵来计算 CNN 损失

【讨论】:

  • 不与他们一起工作我得到同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多