【发布时间】:2021-02-22 22:57:36
【问题描述】:
您好,我是 keras 的新手,我在 keras 中连接了两个 LSTM。数据集是一个单变量时间序列,由方法滑动窗口分割。然后我将它重塑为 [样本、特征、时间步长] 的 tesor。但是,当我尝试拟合模型时,会出现以下错误。
TypeError:在用户代码中:
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py:806 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.8/dist-packages/tensorflow/python/distribute/distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/distribute/distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/distribute/distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py:789 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py:747 train_step
y_pred = self(x, training=True)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/base_layer.py:985 __call__
outputs = call_fn(inputs, *args, **kwargs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/sequential.py:386 call
outputs = layer(inputs, **kwargs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/base_layer.py:982 __call__
self._maybe_build(inputs)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/base_layer.py:2643 _maybe_build
self.build(input_shapes) # pylint:disable=not-callable
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/tf_utils.py:323 wrapper
output_shape = fn(instance, input_shape)
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/layers/merge.py:500 build
del reduced_inputs_shapes[i][self.axis]
TypeError: list indices must be integers or slices, not ListWrapper
我应该如何通过trainX和testX?我想做一些类似这张图片的事情:
代码如下
trainX = numpy.reshape(trainX, (trainX.shape[0],1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1,testX.shape[1]))
model1= Sequential()
model1.add(LSTM(6, input_shape=(1,look_back)))
model2 = Sequential()
model2.add(LSTM(6, input_shape=(1,look_back)))
model = Sequential()
model.add(Concatenate([model1, model1]))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam', metrics = ['mse'])
model.fit([trainX, trainX], trainY, epochs=50, batch_size=1, verbose=1)
【问题讨论】:
-
你使用的tensorflow版本是什么?你以前在代码中使用过类吗?
-
检查这个:stackoverflow.com/questions/52671481/… Tensorflow 2.2.0 中报告了类似的问题,因此可能是 Tensorflow 版本问题。
-
嗨。感谢您的回答。我有 2.3.1 版本,我没有使用类
-
查看例如
trainX.shape[0]分隔之前并检查它是什么类型。它应该是一个整数。如果它不是 int,您可以通过例如设置它x=int(trainX.shape[0])
标签: python keras time-series concatenation