【发布时间】:2021-07-22 02:04:39
【问题描述】:
我目前在使用 Tensorflow 和 LSTM 时遇到了一个大问题,并且找不到解决方案:
我想使用一个大序列长度 = 100 的 LSTM。 对于我有这个配置的模型:
model.add(Masking(mask_value=0.0, input_shape=(1, x.shape[1])))
model.add(LSTM(10))
model.add(Dense(1))
我的输入 x(带有 4 个独立的输入变量)是一个具有特定长度且具有标准化值的数组... 这些列是每个独立的输入变量: 这里是前 3 行
array([[-0.82425835, -0.58544026, 1.51368749, -1.00692614],
[-0.82227587, -0.58777757, 1.51125719, -1.00782088],
[-0.82254579, -0.57388769, 1.50873596, -1.00916302],
...
]])
输出 y,或者假设要预测的变量是另一个自变量。 现在我有它在这个特定的形状/数据类型:
array([[-0.43949472],
[-0.43949472],
[-0.43949472],
...]])
到目前为止,我使用的是 Keras 预处理功能:
dataset = keras.preprocessing.timeseries_dataset_from_array(x, y, sequence_length=1, sampling_rate=1, batch_size=128)
对于 sequence_length=1,一切都使用 fit 命令运行:
history = model.fit(dataset, epochs=1000, callbacks=sel_callback)
现在我想使用 LSTM,就像我认为应该使用的那样,序列长度更长,为 100。
如果我只是更改 Keras 预处理函数中的 sequence_length 选项,一切都会开始,Tensorflow 告诉我,我有很高的准确度,例如0.03 但最后的输出看起来完全错误!
我是否必须以不同的方式预处理数据?! (对于序列长度=1,它工作正常...)
另外,如果我想添加另一个 LSTM,例如:
model.add(Masking(mask_value=0.0, input_shape=(1, x.shape[1])))
model.add(LSTM(10, return_sequences=True))
model.add(LSTM(10))
model.add(Dense(1))
然后我得到一个错误,模型根本不工作......使用sequence_length=1 添加第二个 LSTM 工作?
错误看起来像这样:
File "...\tensorflow\python\eager\execute.py", line 59, in quick_execute
tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.InvalidArgumentError: Operation expected a list with 1 elements but got a list with 2 elements.
[[{{node gradients/TensorArrayUnstack/TensorListFromTensor_grad/TensorListStack}}]]
[[PartitionedCall]] [Op:__inference_train_function_13514]
Function call stack:
train_function -> train_function -> train_function
所以我的问题:
- 我是否必须以不同的方式准备具有高序列长度的数据?还是我有其他我没有找到的问题?
- 为什么我在更改我的 sequence_length>1 时不能添加第二层??
非常感谢!!
【问题讨论】:
标签: python tensorflow keras neural-network lstm