Python 检查模型输入时出错:预期lstm_1_输入有3个维度,但得到了具有形状的数组(339732,29)

Python 检查模型输入时出错:预期lstm_1_输入有3个维度,但得到了具有形状的数组(339732,29),python,keras,lstm,recurrent-neural-network,valueerror,Python,Keras,Lstm,Recurrent Neural Network,Valueerror,我的输入只是一个csv文件,包含339732行和两列: 第一个是29个特征值,即X 第二个是二进制标签值,即Y 我试图在堆叠的LSTM模型上训练我的数据: data_dim = 29 timesteps = 8 num_classes = 2 model = Sequential() model.add(LSTM(30, return_sequences=True, input_shape=(timesteps, data_dim))) # returns

我的输入只是一个csv文件,包含339732行和两列:

  • 第一个是29个特征值,即X
  • 第二个是二进制标签值,即Y
我试图在堆叠的LSTM模型上训练我的数据:

data_dim = 29
timesteps = 8
num_classes = 2

model = Sequential()
model.add(LSTM(30, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 30
model.add(LSTM(30, return_sequences=True))  # returns a sequence of vectors of dimension 30
model.add(LSTM(30))  # return a single vector of dimension 30
model.add(Dense(1, activation='softmax'))

model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

model.summary()
model.fit(X_train, y_train, batch_size = 400, epochs = 20, verbose = 1)
这将抛出错误:

回溯(最近一次呼叫最后一次): 文件“first_approach.py”,第80行,在 模型拟合(X列,y列,批量大小=400,历次=20,详细=1)

ValueError:检查模型输入时出错:预期的lstm_1_输入为 有3个维度,但得到了具有形状的数组(339732,29)

我尝试使用
X_train.重塑((1339732,29))
来重塑输入,但无法显示错误:

ValueError:检查模型输入时出错:预期的lstm_1_输入为 具有形状(无,8,29),但获得具有形状(1339732,29)的数组


如何将输入输入输入到LSTM?

设置
timesteps=1
(因为,我希望每个实例都有一个timestep),并将X\u序列和X\u测试重塑为:

import numpy as np
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))

这成功了

用于
时间步!=1
,您可以使用以下功能(改编自)

例子

X = np.reshape(range(30),(3,10)).transpose()
array([[ 0, 10, 20],
       [ 1, 11, 21],
       [ 2, 12, 22],
       [ 3, 13, 23],
       [ 4, 14, 24],
       [ 5, 15, 25],
       [ 6, 16, 26],
       [ 7, 17, 27],
       [ 8, 18, 28],
       [ 9, 19, 29]])

create_dataset(X, look_back=1 )
(array([[[ 0, 10, 20]],
       [[ 1, 11, 21]],
       [[ 2, 12, 22]],
       [[ 3, 13, 23]],
       [[ 4, 14, 24]],
       [[ 5, 15, 25]],
       [[ 6, 16, 26]],
       [[ 7, 17, 27]],
       [[ 8, 18, 28]],
       [[ 9, 19, 29]]]),
array([[ 0, 10, 20],
       [ 1, 11, 21],
       [ 2, 12, 22],
       [ 3, 13, 23],
       [ 4, 14, 24],
       [ 5, 15, 25],
       [ 6, 16, 26],
       [ 7, 17, 27],
       [ 8, 18, 28],
       [ 9, 19, 29]]))

create_dataset(X, look_back=3)
(array([[[ 0, 10, 20],
        [ 1, 11, 21],
        [ 2, 12, 22]],
       [[ 1, 11, 21],
        [ 2, 12, 22],
        [ 3, 13, 23]],
       [[ 2, 12, 22],
        [ 3, 13, 23],
        [ 4, 14, 24]],
       [[ 3, 13, 23],
        [ 4, 14, 24],
        [ 5, 15, 25]],
       [[ 4, 14, 24],
        [ 5, 15, 25],
        [ 6, 16, 26]],
       [[ 5, 15, 25],
        [ 6, 16, 26],
        [ 7, 17, 27]],
       [[ 6, 16, 26],
        [ 7, 17, 27],
        [ 8, 18, 28]],
       [[ 7, 17, 27],
        [ 8, 18, 28],
        [ 9, 19, 29]]]),
array([[ 2, 12, 22],
       [ 3, 13, 23],
       [ 4, 14, 24],
       [ 5, 15, 25],
       [ 6, 16, 26],
       [ 7, 17, 27],
       [ 8, 18, 28],
       [ 9, 19, 29]]))

重塑LSTM的输入:

X = array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
X_train = X.reshape(1, 3, 3) # X.reshape(samples, timesteps, features)

为什么要使用没有时间步长的LSTM模型?当我将从
create\u dataset()
返回的对象传递到
model.fit()
AttributeError:“tuple”对象没有属性“shape”
create\u dataset返回一个
x,y
的元组时,会出现此错误。尝试
x\u-train,y\u-train=create\u-dataset(dataset)
然后
model.fit(x\u-train,y\u-train)
我有一个输入训练集,它是一个np.array,有100行50列。其中一些列包含浮点值,一些包含使用
keras.utils.to_category()
构建的“热编码”,这些基本上只是数组。我不知道如何使用
x\u-train
y\u-train
。我的训练标签在一个单独的数组中,输入模型只包含训练数据(第一次输入到model.fit()),在这种情况下,只需忽略此函数中的
y\u train
,并使用已在单独数组中的数据。另外,model.fit会从这个函数中接受
x_训练
,而您自己的target仍然不工作,我已经在一个类似我的问题上打开了一个悬赏:基本上是在一个连续层中处理一个包含数组和数值的训练集
X = array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
X_train = X.reshape(1, 3, 3) # X.reshape(samples, timesteps, features)