【问题标题】:deep learning (lstm) with keras and variable size of inputs具有 keras 和可变输入大小的深度学习 (lstm)
【发布时间】:2018-10-24 04:09:20
【问题描述】:

我正在尝试使用 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

谢谢

【问题讨论】:

    标签: python-3.x multidimensional-array keras deep-learning lstm


    【解决方案1】:

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

    所以基本上不可能一次性将你的数据提供给 keras。

    但是,有几种可能的解决方案。他们中的大多数要求您的 keras 输入形状在您的时间步长维度中必须为 None:

    1. 使用填充让您的数据始终具有相同的形状
    2. 使用 batch_size = 1 训练
    3. 按批次对数据进行排序,使每个批次内的每个样本都具有相同的形状。

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

    【讨论】:

    • 嗨 dennis-ec,谢谢。我会选择填充,因为第二个和第三个选项对我来说是不可能的。如果我使用填充,我还需要设置 timesteps=None 吗?
    • 不,因为你有一个固定的长度,但它不会有任何区别。
    • 不,如果你使用填充,你可以有固定的时间步长(但这没有什么区别)。您应该考虑使用标识序列结尾的符号(并用该符号填充),还应考虑添加Masking 层以跳过对这些符号的计算。
    • 感谢您提及遮罩。我不知道,我刚刚检查过,看起来不错。
    猜你喜欢
    • 2018-12-18
    • 2021-04-16
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2019-04-13
    • 2016-09-20
    相关资源
    最近更新 更多