擅长:python、mysql、java
<p>方法1<strong>是</strong>正确的</strong>方法,因为只定义一次梯度图(用于计算反向传播)。这样,您就可以使用一个带有单个图形的单个loss函数来对同一个参数进行单个更新(更新会同时考虑这两个损失项)。</p>
<p>相反,第二种方法定义了两个不同的图来计算梯度,<strong>是错误的。
当您执行训练操作时,您是并行执行(因为您使用了<code>tf.group</code>/<code>tf.tuple</code>/<code>tf.control_dependencies</code>)训练操作的计算。</p>
<p>运算将计算两个不同的损失和两组不同的更新变量。</p>
<p>当更新变量的时刻到来时,您会遇到一个问题:
哪个更新操作首先执行,由第一个图定义的那个还是另一个?
无论如何,你要放弃一个计算,因为一个将覆盖另一个。更新中没有同步,计算的损失也没有关系。</p>