<p>首先需要缩放测试(<code>X_test</code>)输入。您确实缩放了训练数据(<code>X_train</code>),但没有缩放测试集。在</p>
<p>所以您需要像使用<code>X_train</code>那样缩放它:</p>
<pre><code>X_test = preprocessing.MinMaxScaler().fit_transform(X_test.reshape(-1, 50*8)).reshape(-1, 50, 8)
</code></pre>
<p>此外,在输出层中使用<code>'ReLU'</code>激活是有问题的。因为即使最后一层权重为负输出,也始终会得到正输出。在</p>
<p>这里的问题是这些负输出的权重不会得到更新,因为损失非常低。在</p>
<p>假设您的权重集导致输出<code>-23435235</code>,而目标是<code>0.9</code>。当在输出上使用<code>'ReLU'</code>激活时,它将从<code>-23435235</code>映射到{<cd9>},这会导致低损耗。但低损耗意味着变化较小,而高损耗则会导致体重发生很大变化。在</p>
<p>所以你想要一个高的损失,以便得到一个强有力的修正你的体重。因为<code>-23435235</code>不是你想要的。在</p>
<p>所以不要在最后一层使用<code>'ReLU'</code>,我在这里改为<code>'linear'</code>。在</p>
<p>所以说(我把<code>'tanh'</code>改为<code>'ReLU'</code>顺便说一句)代码:</p>
^{pr2}$
<p><strong>输出:</strong></p>
<pre><code>Train on 291314 samples, validate on 72829 samples
Epoch 1/15
291314/291314 [==============================] - 22s 75us/step - loss: 0.1523 - val_loss: 0.2442
Epoch 2/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0652 - val_loss: 0.2375
Epoch 3/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0420 - val_loss: 0.2316
Epoch 4/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0337 - val_loss: 0.2262
Epoch 5/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0271 - val_loss: 0.2272
Epoch 6/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0219 - val_loss: 0.2256
Epoch 7/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0179 - val_loss: 0.2245
Epoch 8/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0149 - val_loss: 0.2246
Epoch 9/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0125 - val_loss: 0.2244
Epoch 10/15
291314/291314 [==============================] - 16s 57us/step - loss: 0.0108 - val_loss: 0.2213
Epoch 11/15
291314/291314 [==============================] - 16s 57us/step - loss: 0.0096 - val_loss: 0.2197
Epoch 12/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0087 - val_loss: 0.2189
Epoch 13/15
291314/291314 [==============================] - 16s 57us/step - loss: 0.0080 - val_loss: 0.2178
Epoch 14/15
291314/291314 [==============================] - 16s 56us/step - loss: 0.0075 - val_loss: 0.2148
Epoch 15/15
291314/291314 [==============================] - 16s 57us/step - loss: 0.0072 - val_loss: 0.2129
<tensorflow.python.keras.callbacks.History at 0x7f8a93637b70>
</code></pre>
<p>进一步的<code>X_test</code>结果:</p>
<p><strong>代码:</strong></p>
<pre><code>prediction = model.predict(X_test[:10])
prediction
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>array([[0.03562379, 0.06016447, 0.0987532 , 0.01986726, 0.0336756 ],
[0.03518523, 0.06041833, 0.0983481 , 0.01864071, 0.03437094],
[0.03487844, 0.06067847, 0.09811568, 0.0175517 , 0.03480709],
[0.03491565, 0.05986937, 0.09927133, 0.02029082, 0.03347992],
[0.03466946, 0.06018706, 0.09859383, 0.01869587, 0.03432 ],
[0.03459518, 0.06030918, 0.09850594, 0.01805007, 0.03444977],
[0.03448001, 0.06019764, 0.09864715, 0.01818896, 0.034256 ],
[0.03450274, 0.05936757, 0.10001318, 0.02131432, 0.03305689],
[0.03424717, 0.05954869, 0.09983289, 0.0208826 , 0.03378636],
[0.03426195, 0.05959999, 0.09991242, 0.02090426, 0.03394405]],
dtype=float32)
</code></pre>
<p>我用你的笔记本和数据来训练上述模型。在</p>
<p>正如您所看到的,在epoch15中验证损失仍然在减少,而且测试输出看起来非常接近目标。在</p>
<hr/>
<p>还有一点需要注意的是,我还没有看过笔记本中所有的预处理代码,但在我看来,你使用的是绝对值。在</p>
<p>如果是这种情况,则应考虑使用百分比变化(例如从当前时间点到未来的预测点)。这也为你做了缩放。(10%变化=0.1)</p>
<p>进一步的绝对值确实变化太大。如果十个月前的价格是<code>~5.4324</code>,而今天的价格是<code>~50.5534</code>,那么这些数据对你来说是无用的,而价格变化的相对模式可能仍然有效。在</p>
<p>这只是一个旁注-我希望它有帮助。在</p>