首页 文章

LSTM Keras-值输入尺寸错误

提问于
浏览
0

我正在尝试使用Keras实现LSTM以解决多类问题 . 我输入了尺寸为1007x5的csv . 每个实例的功能数量为5个,共有12个类别 . 下面是代码

seed = 7
numpy.random.seed(seed)

input_file = 'input.csv'

def load_data(test_split = 0.2):
    print ('Loading data...')
    dataframe = pandas.read_csv(input_file, header=None)
    dataset = dataframe.values

    X = dataset[:,0:5].astype(float)
    print(X)
    Y = dataset[:,5]
    print("y=", Y)    
    return X,Y


def create_model(X):
    print ('Creating model...')
    model = Sequential()

    model.add(LSTM(128, input_shape =(5,)))
    model.add(Dense(12, activation='sigmoid'))

    print ('Compiling...')
    model.compile(loss='categorical_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])
    return model


X,Y,dummy_y= load_data()
print("input Lnegth X=",len(X[0]))

model = create_model(X)

print ('Fitting model...')
hist = model.fit(X, Y, batch_size=5, nb_epoch=10, validation_split = 0.1, verbose = 1)


score, acc = model.evaluate(dummy_x,dummy_y)
print('Test score:', score)
print('Test accuracy:', acc)

在这里的不同论坛和帖子中出现此错误后,我尝试了不同的输入形状,但仍然无法正常工作 . 当我给出输入数据形状时,我得到以下错误:1 . 当我将input_shape作为X.shape [1:]时) - 错误是“输入0是不兼容的层lstm_1:预期ndim = 3,找到ndim = 2”

  • 当我给出input_shape = X.shape [1:])时,错误是“值错误:检查输入时:预期lstm_1_input有3个维度,但得到的数组有形状(1007,5)”

  • 除了形状,如果ndim设置为5,则表示“输入0是不兼容的层lstm_1:预期ndim = 3,找到ndim = 2”

什么应该输入到第一层lstm?我对第1层的维度应该是(128,1007,5),对吧?

1 回答

  • 0

    LSTM需要三维输入 . 您的输入形状应采用(样本,时间步长,功能)的形式 . 由于keras推断第一个维度是样本,因此您应该输入(时间步长,特征)作为输入形状 .

    由于你的csv的维度是1007 * 5,我认为最好的做法是将你的输入重塑为(1007,5,1),这样你的LSTM就可以获得3D输入 .

    所以在load_data里面:

    X = X.reshape(X.shape[0], x.shape[1], 1)
    

    在create_model里面:

    model.add(LSTM(128, input_shape =(5,1)))
    

相关问题