相关疑难解决方法(0)

当使用相同的训练数据作为验证数据时,为什么 val_loss 与训练损失不同?

像这样:

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 是不同的。在其他一些测试中,我发现差异是显着的。为什么?

machine-learning deep-learning keras

9
推荐指数
1
解决办法
2714
查看次数

非确定性梯度计算

我意识到每次训练时我的模型最终会变得不同,即使我保持TensorFlow随机种子相同.

我证实了这一点:

  • 初始化是确定性的; 在第一次更新之前,权重是相同的.
  • 输入是确定性的.事实上,包括损失在内的各种正向计算在第一批中是相同的.
  • 第一批的渐变是不同的.具体来说,我正在比较的输出tf.gradients(loss, train_variables).虽然loss并且train_variables具有相同的值,但是对于一些变量,梯度有时是不同的.差异非常显着(有时单个变量的梯度的绝对差值之和大于1).

我得出结论,这是导致非确定性的梯度计算.我看了一下这个问题,当用intra_op_parallelism_thread=1和运行CPU时问题仍然存在inter_op_parallelism_thread=1.

当前向传球不是时,后向传球如何是不确定的?我怎么能进一步调试呢?

non-deterministic tensorflow

6
推荐指数
1
解决办法
1281
查看次数