回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在跟踪一个<a href="https://machinelearningmastery.com/time-series-forecasting-long-short-term-memory-network-python/" rel="nofollow noreferrer">LSTM tutorial</a>。你知道吗</p>
<p>为了将训练数据分为输入(x)和输出(y),我必须执行以下命令:</p>
<pre class="lang-py prettyprint-override"><code>X, y = train[:, 0: -1], train[:, -1]
</code></pre>
<p>很遗憾,它无法工作,并且在打印<code>train[:, 0: -1]</code>时生成以下错误:</p>
<pre><code>> TypeError: '(slice(None, None, None), slice(0, -1, None))' is an invalid key
</code></pre>
<p>我已尝试将此命令替换为:</p>
<pre class="lang-py prettyprint-override"><code>X, y = train[:][0: -1], train[:][-1]
</code></pre>
<p>但我很肯定它不会给出相同的输出,因为有几个输入和一个输出是不合逻辑的(在我的例子中)。你知道吗</p>
<p>下面是一个最小的可复制代码和一个数据示例:</p>
<pre class="lang-py prettyprint-override"><code>from pandas import DataFrame
from pandas import datetime
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import numpy
O = [0.701733664614, 0.699495411782, 0.572129320819, 0.613315597684, 0.58079660603, 0.596638918579, 0.48453382119]
Ab = [datetime(2018, 12, 11, 14, 0), datetime(2018, 12, 21, 10, 0), datetime(2018, 12, 21, 14, 0), datetime(2019, 1, 1, 10, 0), datetime(2019, 1, 1, 14, 0), datetime(2019, 1, 11, 10, 0), datetime(2019, 1, 11, 14, 0)]
data = DataFrame(numpy.column_stack([O, Ab]),
columns=['ndvi', 'datetime'])
def fit_lstm(train, batch_size, nb_epoch, neurons):
X, y = train[:, 0: -1], train[:, -1]
X = X.values.reshape(X.shape[0], 1, X.shape[1])
model = Sequential()
model.add(LSTM(neurons, batch_input_shape=(batch_size, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
for i in range(nb_epoch):
model.fit(X, y, epochs=1, batch_size=batch_size, verbose=0, shuffle=False)
model.reset_states()
return model
train, test = data.values[0:-2], data.values[-2:]
print (train[:, 0:-1])
</code></pre>
<p>我只想解决这个问题以适应LSTM模型:</p>
<pre><code>lstm_model = fit_lstm(train, 1, 3000, 4)
</code></pre>
<p>也许,在这种情况下,我必须使用<code>shift()</code>,将最后一个时间步作为输入,将当前一个作为输出?
像这样:</p>
<pre class="lang-py prettyprint-override"><code>shift_steps = 1
train_targets = train.shift(-shift_steps)
X, y = train, train_targets
</code></pre>