Python 虚拟批处理范数的两种实现导致两种不同的结果 介绍性问题:
两个示例代码是否都会导致不同的培训行为(任何损失/任何优化器) 我的真实案例场景: 我正在尝试实现虚拟批处理规范,我有两个实现,它们的行为方式不同,这是受。这里显示的两个实现都经过了简化,以保留它们之间的差异 第一次实施: 一切似乎都很顺利,验证和培训的准确性都在提高,损失也在减少 第二次实施 在这里,只有训练收敛(但曲线与第一次实现略有不同),而验证损失增加,准确性停留在随机猜测中Python 虚拟批处理范数的两种实现导致两种不同的结果 介绍性问题:,python,tensorflow,tensorflow-gpu,batch-normalization,tensorflow-xla,Python,Tensorflow,Tensorflow Gpu,Batch Normalization,Tensorflow Xla,两个示例代码是否都会导致不同的培训行为(任何损失/任何优化器) 我的真实案例场景: 我正在尝试实现虚拟批处理规范,我有两个实现,它们的行为方式不同,这是受。这里显示的两个实现都经过了简化,以保留它们之间的差异 第一次实施: 一切似乎都很顺利,验证和培训的准确性都在提高,损失也在减少 第二次实施 在这里,只有训练收敛(但曲线与第一次实现略有不同),而验证损失增加,准确性停留在随机猜测中 作为细节,我使用GPU,TysFooS1.2.1,XLA使能。 知道我做错了什么吗 编辑: 因此,我尝试比较两个
作为细节,我使用GPU,TysFooS1.2.1,XLA使能。 知道我做错了什么吗
编辑: 因此,我尝试比较两个输出模型,并查看梯度(使用compute_梯度),为了避免权重(然后是梯度)共享,我在两个不同的范围内构建了模型,并在两个模型上分别加载相同的权重(来自先前训练的模型) 如果我只使用以下命令,则输出相同:sess.run([model.outputs, model2.outputs])
但如果我同时使用以下方法查看渐变(Optimizer.compute_gradients(loss))时每个元组返回的第一个元素:
sess.run([model.outputs, model2.outputs, grads])
突然之间,模型输出不同。。。仅通过查看渐变而不使用apply_渐变,模型输出如何变化?此外,它似乎没有改变重量,因为如果我在跑步:
sess.run(grads)
sess.run([model.outputs, model.outputs2])
模型输出仍然是相同的…
< P> OK,XLA似乎是BGGY,因为在禁用XLA之后,我得到了一致的结果。看来XLA在第二个实现中无法处理一些……/P> 稍后,我将在存储库中提出一个问题,“计算梯度”修改输出尤其令人不安sess.run([model.outputs, model2.outputs])
sess.run([model.outputs, model2.outputs, grads])
sess.run(grads)
sess.run([model.outputs, model.outputs2])