【问题标题】:ValueError: logits and labels must have the same shape ((None, 2) vs (None, 1))ValueError:logits 和标签必须具有相同的形状 ((None, 2) vs (None, 1))
【发布时间】:2021-07-27 08:47:09
【问题描述】:

我正在使用 LSTMS 来预测我们(机器人)是否应该基于 2 个因素购买东西。所以我的 X 由一个 numpy 数组组成,该数组由单独的 numpy 数组组成,每个数组都有一个为 2 的 numpy 数组。由于这令人困惑,它看起来像 np.array(np.array(np.array([item,item]),np.array ([item,item])),np.array(np.array([item,item]),np.array([item,item])))

我的 y 值是一个 0 和 1 列表的 numpy 数组。一个例子是

[[1]
 [0]
 [0]
 ...
 [0]]

这是我的模型


model = Sequential()
model.add(LSTM(128,input_shape=(30,2),return_sequences=True))
model.add(Dropout(0.1))

model.add(LSTM(128,return_sequences=True))
model.add(Dropout(0.2))

model.add(LSTM(128))
model.add(Dropout(0.1))

model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(64,activation='relu'))
model.add(Dense(2,activation='softmax'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(seqs,buy_sell,epochs=200,callbacks=[tensboard])

还有我的回溯

ValueError: logits and labels must have the same shape ((None, 2) vs (None, 1))

我正在考虑重塑我的 X/y,但这不会影响模型。我该如何解决这个问题?

损失函数和这个有关系吗?

【问题讨论】:

  • 你能打印你的 y 数组的一部分吗?
  • 好的,那么你需要将最后一个密集层的形状更改为1。而不是softmax使用sigmoid进行激活。
  • 另外,你不需要 flatten 层。当 return_sequence 为 false 时,LSTM 输出是平坦的。

标签: python arrays numpy tensorflow lstm


【解决方案1】:

添加到我的cmets,如果你出于任何原因想坚持softmax激活(你以后可能会有更多的类),那么修改最后一行代码如下:

model.fit(seqs, tf.keras.utils.to_categorical(buy_sell,  num_classes=2), epochs=200, callbacks=[tensboard])

【讨论】:

    猜你喜欢
    • 2021-10-28
    • 2021-07-28
    • 2020-12-02
    • 2021-03-23
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2023-04-08
    相关资源
    最近更新 更多