对于CNN(或常规NN),如果定义2个输出,则每个输出的输出层不同(权重)。以下2个案例似乎有效(收敛),但不确定这是否正确。在以下情况下如何传播错误?
1)如果定义如下,2个输出的误差被平均,然后从2个输出层反向传播,具有相同的误差,然后到训练期间的休息层?
logits = output(full, num_outputs)
output = tf.tanh(logits)
cost = tf.reduce_mean(tf.square(tf.subtract(y, output)))
optimizer = tf.train.AdamOptimizer(learn_rate).minimize(cost)
2)如果将成本定义如下,则每个输出的误差从每个输出层反向传播(误差不同于每个输出),然后在训练期间返回到其余层?
cost = tf.reduce_mean(tf.square(tf.subtract(y, output)), 0)
答案 0 :(得分:0)
我将回答第二个问题(我们在评论中讨论第一个问题,我们可以继续讨论)。
之间的区别cost = tf.reduce_mean(tf.square(tf.subtract(y, output)))
和
cost = tf.reduce_mean(tf.square(tf.subtract(y, output)), 0)
是在第一种情况下,均值是在参数中的每个值上计算的,因此它会产生单个值。在第二种情况下,平均值是针对沿轴0的每个项目单独计算的。假设您正在对批次样本进行培训,第二种情况将分别计算批次中每个样本的成本,其中第一种情况将计算所有样本的成本样品
查看tensorflow源,似乎优化器会适当地处理这两种情况,尝试最小化成本函数,无论它返回单个值还是多个值。