我如何正确地为 keras 模型塑造我的输入数据?

问题描述

为了好玩,我目前正在研究 Keras 神经网络。我只是在学习基础知识,但无法克服这个尺寸问题:

所以我的输入数据 (X) 应该是一个 12x6 的矩阵,每个时间戳有 12 个时间戳和 6 个不同的数据值:

X = np.zeros([2867,12,6])
Y = np.zeros([2867,3])

我的输出 (Y) 应该是一个单热编码的 3x1 向量。

现在我想通过以下 LSTM 模型提供这些数据。

model = Sequential()
model.add(LSTM(30,activation="softsign",return_sequences=True,input_shape=(12,6)))
model.add(Dense(3))
model.summary()
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
model.fit(x=X,y=Y,batch_size=100,epochs=1000,verbose=2,validation_split=0.2)

摘要如下所示:

模型:“顺序”


Layer (type)                 Output Shape              Param #   
=================================================================
lstm (LSTM)                  (None,30)            4440      
_________________________________________________________________
dense (Dense)                (None,3)             93        
=================================================================
Total params: 4,533
Trainable params: 4,533
Non-trainable params: 0
_________________________________________________________________

当我运行这个程序时,我收到这个错误: ValueError: Shapes (None,3) 和 (None,3) 不兼容。

我已经尝试将我的数据重塑为 72x1 的向量,但这也不起作用。

也许有人可以帮助我正确调整输入数据的形状:)

解决方法

在使用 categorical_crossentropy 损失函数时,您可能需要按如下方式定义模型。

model.add(LSTM(30,activation="softsign",return_sequences=False,input_shape=(12,6)))
model.add(Dense(3,activations='softmax'))