Keras LSTM编码器-解码器重塑数据

Keras LSTM编码器-解码器重塑数据,keras,lstm,Keras,Lstm,我正在试验LSTM编码器和解码器。我不清楚应该由谁来重塑输入数据 我使用了以下代码: import keras import random import numpy as np from random import randint from numpy import array from numpy import argmax from pandas import DataFrame from pandas import concat from keras.models import Seque

我正在试验LSTM编码器和解码器。我不清楚应该由谁来重塑输入数据

我使用了以下代码:

import keras
import random
import numpy as np
from random import randint
from numpy import array
from numpy import argmax
from pandas import DataFrame
from pandas import concat
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import TimeDistributed
from keras.layers import RepeatVector

cardinality= 10
n_steps=10
n_steps_y=3
n_features=1
def getRandomInt():
    return getOneHotEncoded(random.randint(1,cardinality),cardinality)

def getOneHotEncoded(value, cardinality):
    encoded = [0 for _ in range(cardinality+1)]
    encoded[value] = 1
    return encoded

def generateXY():
    X, y = list(), list()
    for q in range(100):
        x_temp = [getRandomInt() for _ in range(10)]
        y_temp = x_temp[-3:]
        X.append(x_temp)
        y.append(y_temp)
    return np.array(X), np.array(y)

def getModel(n_steps=n_steps,n_features=n_features):
    model = Sequential()
    model.add(LSTM(12, input_shape=(n_steps,n_features)))
    model.add(RepeatVector(n_steps_y))
    model.add(LSTM(5, return_sequences=True))
    model.add(TimeDistributed(Dense(1)))
    model.compile(loss='categorical_crossentropy',optimizer='adam')
    print(model.summary())
    return model

X,y = generateXY()

model=getModel()
model.fit(X,y, epochs=10, batch_size=10,verbose=1)
并且得到了关于输入形状的错误

ValueError:检查输入时出错:预期lstm_1_输入具有 形状10,1但是得到了形状10,11的数组


我应该如何为这段代码适当地重塑输入?

我认为您试图做的是传递一个热编码随机数的数组序列。序列长度为10,数组长度为11

要表示这一点,需要将n_步骤设置为10,n_特征设置为11

顺便说一下:在encoded=[0代表uuin rangecardinality+1]中,我不太理解基数+1背后的原因。您不需要添加1来表示从0到9的数字。如果将其更改为encoded=[0表示u in rangecardinality],则可以将n_features设置为10

我希望这有帮助