像这样:
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 是不同的。在其他一些测试中,我发现差异是显着的。为什么?
我意识到每次训练时我的模型最终会变得不同,即使我保持TensorFlow随机种子相同.
我证实了这一点:
tf.gradients(loss, train_variables).虽然loss并且train_variables具有相同的值,但是对于一些变量,梯度有时是不同的.差异非常显着(有时单个变量的梯度的绝对差值之和大于1).我得出结论,这是导致非确定性的梯度计算.我看了一下这个问题,当用intra_op_parallelism_thread=1和运行CPU时问题仍然存在inter_op_parallelism_thread=1.
当前向传球不是时,后向传球如何是不确定的?我怎么能进一步调试呢?