【发布时间】: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