<p>嗯,我认为@blue phoenox的答案中建议的标准化方案是有缺陷的。这是因为您永远不应该独立地对测试数据进行标准化(即使用不同的统计数据)。相反,您应该使用训练数据规范化期间计算的统计数据来规范化测试数据</strong>。所以一定是这样的:</p>
<pre><code>mms = preprocessing.MinMaxScaler()
X_train = mms.fit_transform(X_train)
X_test = mms.transform(X_test) # you should not use fit_transform
</code></pre>
<p>这是有意义的,因为考虑以下场景,您已经训练了模型,现在将其部署到生产中以供实际使用。现在一个用户给它提供一个新的样本。你需要首先规范化这个新的样本,但是怎么做呢?您不能独立缩放其值,因为它只有一个采样(即,如果使用“最小最大缩放器”(min-max scaler),则所有采样值都将为1或0)。相反,您应该使用(在使用minmax scaler的情况下)在训练数据上计算的“min”和“max”值来规范化这个新的测试数据。在</p>
<p>这在图像模型中非常常见,例如:</p>
^{pr2}$
<p>请注意,我们将训练和测试数据除以同一个数字(即255)。或者更复杂的标准化方案:</p>
<pre><code>X_mean = X_train.mean(axis=0)
X_std = X_train.std(axis=0)
X_train -= X_mean
X_train /= X_std + 1e-8 # add a small constant to prevent division by zero
# Now to normalize test data we use the same X_mean and X_std already computed
X_test -= X_mean
X_test /= X_std + 1e-8
</code></pre>
<hr/>
<p>旁注(正如我在<a href="https://stackoverflow.com/questions/51971180/keras-gru-model-predicts-only-0-0-0-0-0/52102658#comment91155333_52085844">my comment</a>中提到的):如果您在GPU上运行训练,那么您可以考虑使用<a href="https://keras.io/layers/recurrent/#cudnngru" rel="nofollow noreferrer">^{<cd1>}</a>而不是{<cd2>}(或{<cd3>}而不是{<cd4>}),因为它是专门针对GPU优化的,可以加快训练过程。在</p>