代码之家  ›  专栏  ›  技术社区  ›  user8530765

具有KERA和可变输入量的深度学习(lstm)

  •  1
  • user8530765  · 技术社区  · 7 年前

    我正在尝试用keras实现一个lstm模型。问题是我有不同形状的数据。我的数据如下所示:

    col1 col2 col3 col4 col5

    [1,2,3][2,3,4][3,4,5][5,6,7][4,5,9]

    [0,2][1,5][1,24][11,7][1,4]

    [0,2,4,5][1,5,7,8][1,24,-7,6][11,7,4,5][1,4,1,2]

    我的代码是

    import numpy as np
    import pandas as pd
    import h5py
    from sklearn.model_selection import train_test_split
    from keras.layers import Dense
    from keras.layers import Input, LSTM
    from keras.models import Model
    
    X_train, X_test, y_train, y_test = train_test_split(X, y_target, test_size=0.2, random_state=1)  
    batch_size = 32 
    timesteps = 300 
    output_size = 1
    epochs=120
    
    inputs = Input(batch_shape=(batch_size, timesteps, output_size))
    lay1 = LSTM(10, stateful=True, return_sequences=True)(inputs)
    lay2 = LSTM(10, stateful=True, return_sequences=True)(lay1)
    output = Dense(units = output_size)(lay2)
    
    regressor = Model(inputs=inputs, outputs = output)
    regressor.compile(optimizer='adam', loss = 'mae')
    regressor.summary()
    
    for i in range(epochs):
        print("Epoch: " + str(i))
        regressor.fit(X_train, y_train, shuffle=False, epochs = 1, batch_size = batch_size)
        regressor.reset_states()
    

    运行代码时出现的错误是:

    ValueError: Error when checking input: expected input_5 to have 3 dimensions, but got array with shape (11200, 5) #11200 lines, 5 columns
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  0
  •   dennis-w    7 年前

    多维numpy数组需要有一个清晰的形状,因此将不同长度的数组放在同一numpy数组中,将得到一个对象的numpy数组,而不是所需的多维数组。

    因此,基本上不可能一次性将数据提供给keras。

    然而,有几种可能的解决方案。其中大多数要求您的keras输入形状在时间步维度中必须为无:

    1. 使用填充,使数据始终具有相同的形状
    2. batch\u size=1的列车
    3. 按批次对数据进行排序,使每个批次内的每个样本具有相同的形状。

    最后两个选项需要使用fit\u generator选项,因为您必须逐步提供数据。