首页 文章

Keras上的多对一LSTM,softmax尺寸误差

提问于
浏览
0

我正在尝试使用LSTM训练一个简单的多对一RNN分类器 . 我的时间步长是100个数据点长7个功能,我总共有192382个样本 . 这是我的模型:

model = Sequential()
model.add(LSTM(50,input_shape = (100,7),name = 'LSTM',return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(3, activation='softmax',name = 'softmax_layer'))
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'],name='softmax')
model.fit(datax,datay,epochs=25,batch_size=128)
model.summary()

该模型编译良好,没有错误,但我无法适应模型 . 这是它返回的错误:

ValueError: Error when checking target: expected softmax_layer to have shape (None, 3) but got array with shape (192282, 100)

有没有人知道为什么softmax层返回一个(192282,100)矩阵? LSTM层中的return_sequence = False是不是每次只能给出一个输出?

1 回答

  • 0

    实际上,softmax_layer返回(None,3),因为最后一层的大小是3 .

    可能你想解决它?因此,为了修复它,您需要输出层(softmax_layer)的大小应该等于标签数组的大小(datay.shape [1]) . 换句话说,它必须等于许多类 .

    快速修复是:

    model = Sequential()
    model.add(LSTM(50,input_shape = (100,7),name = 'LSTM',return_sequences=False))
    model.add(Dropout(0.2))
    model.add(Dense(datay.shape[1], activation='softmax',name = 'softmax_layer'))
    model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'],name='softmax')
    model.fit(datax,datay,epochs=25,batch_size=128)
    model.summary()
    

相关问题