【发布时间】:2021-02-27 19:00:43
【问题描述】:
我正在尝试创建一个简单、简单的 LSTM 示例来预测浮点数序列中的下一个点。为了简单起见,我选择了线性样本数据。我正在使用 TensorFlow 2.3.1 和 NumPy 1.18.5。
这是输入数据的设置,长度为 5 的基本滚动范围:
# Sample data -- linear function
linear_data=0.05+0.05*np.array(range(20))
# Size of window in rolling horizon
window = 5
# Tensorflow expects 3D: i,j,k = samples, window/sequence data,
# features (one since we're univariate)
rolling_x = np.zeros([len(linear_data)-window, window, 1])
rolling_y = np.zeros([len(linear_data)-window, 1])
# Populate the rolling horizon data
for idx in [t for t in range(len(linear_data)-window)]:
rolling_x[idx, :, 0] = linear_data[idx:idx+window]
rolling_y[idx, :] = linear_data[idx+window]
print(rolling_x[:,:,0])
>>> [[0.05 0.1 0.15 0.2 0.25]
>>> [0.1 0.15 0.2 0.25 0.3 ]
>>> [0.15 0.2 0.25 0.3 0.35]
...
>>> [0.75 0.8 0.85 0.9 0.95]]
其中rolling_y 包含序列中的下一项。我的理解是,数据应该由第一个轴上的批次/样本数据、第二个轴上的序列/窗口和最后一个轴上的特征数(在这种情况下为 1,因为我是单变量的)来构建。
从这里我构建了一个非常简单的模型:
# Build the model
tf_model = Sequential()
tf_model.add(LSTM(
units=32,
input_shape=[window, 1]
))
tf_model.add(Dense(units=1))
tf_model.compile()
它编译得很好,但是当我尝试训练 (tf_model.fit(rolling_x, rolling_y)) 时出现以下错误:
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function *
return step_function(self, iterator)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step **
outputs = model.train_step(data)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\engine\training.py:756 train_step
_minimize(self.distribute_strategy, tape, self.optimizer, loss,
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\engine\training.py:2736 _minimize
gradients = optimizer._aggregate_gradients(zip(gradients, # pylint: disable=protected-access
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:562 _aggregate_gradients
filtered_grads_and_vars = _filter_grads(grads_and_vars)
c:\users\____\documents\data_analytics\lstm-demo\env\lib\site-packages\tensorflow\python\keras\optimizer_v2\optimizer_v2.py:1270 _filter_grads
raise ValueError("No gradients provided for any variable: %s." %
ValueError: No gradients provided for any variable: ['lstm_3/lstm_cell_3/kernel:0', 'lstm_3/lstm_cell_3/recurrent_kernel:0', 'lstm_3/lstm_cell_3/bias:0', 'dense_3/kernel:0', 'dense_3/bias:0'].
【问题讨论】:
-
您没有指定训练损失。老实说,我很惊讶没有为此采取任何保障措施。我建议再看看
compile和它需要的参数。 -
我这么简单的疏忽,确实解决了问题。我会考虑添加一个功能请求,因为我认为它会默认为 RMSE、MSE 或 MAE。它可能对错误消息更有帮助。
标签: python keras time-series lstm tensorflow2.0