spi*_*der 9 machine-learning deep-learning keras
像这样:
x = keras.layers.Input(shape=(3,))
y = keras.layers.Dense(5)(x)
G = keras.models.Model(x, y,name='G')
G.compile(optimizer='rmsprop', loss='mse')
data_x = np.random.random((10, 3))
data_y = np.random.random((10, 5))
G.fit(data_x,data_y,shuffle=False,validation_data=[data_x,data_y],verbose=1)
Run Code Online (Sandbox Code Playgroud)
结果:
Train on 10 samples, validate on 10 samples
Epoch 1/1
10/10 [==============================] - 27s 3s/step - loss: 0.4482 - val_loss: 0.4389
Run Code Online (Sandbox Code Playgroud)
打印的损失和 val_loss 是不同的。在其他一些测试中,我发现差异是显着的。为什么?
还有一些其他原因可能导致观察到的值差异:
根据我这个问题的答案,显示的训练损失是在优化之前计算的。因此,在您只训练单个批次的情况下,在训练和验证损失评估之间仍然应用了一个优化步骤。
在训练阶段/测试阶段,有些层的行为不同,例如 BatchNormalization 层或 Dropout 层,如 Keras FAQ 中所述。如果您点击链接,还有一个代码示例如何获取两个阶段中任一阶段的模型输出(不应用调用方法时应用的优化model.fit,model.train_on_batch等等)
这是为了完整性,尽管差异会比您显示的要小得多。当使用GPU,有一些可被执行的方法的非确定性。多次执行相同的操作时,这可能会显示出细微的数值差异,尽管我不确定这是否会成为您具体计算中的问题。例如,请参阅有关 Tensorflow 的此问题的答案,或有关 Theano 的此评论。
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |