【发布时间】:2018-07-17 16:26:47
【问题描述】:
我需要基于tensorflow框架实现YOLOv2。 首先,在我的网络设计中,每个单元格和一个类(人脸)有五个锚点,因此最终网络输出具有 n * c * h * w 形状的 4D 张量。这里n表示batch size,c = 5 *(位置坐标+客观性得分+分类概率)=5 *(4 + 1 + 1)= 30,h/w分别表示特征图的高度和宽度。 其次,YOLOv2采用多任务损失函数:
所以我定义了以下函数来计算总损失:
def yolov2_loss_function(pred, ground_truth, global_step)
这个函数接受三个参数:pred代表网络输出张量,上面已经讲过了,ground_truth代表对应的GT,global_step代表迭代次数。此函数返回一个标量值,用于表示总损失。 最后我使用下面的代码来执行 SGD 训练:
......
total_loss = yolov2_loss_function(pred, gt, global_step)
optimizer = tf.train.MomentumOptimizer(learning_rate=lr, momentum=momentum).minimize(total_loss, global_step=global_step)
......
我不确定上述过程是否正确。尤其是total_loss变量只是一个标量,tensorflow框架如何知道输出张量中每个元素的residual/gradient并进一步进行反向传播呢?我知道自动差速器的机制,但自动差速器的前提是每个输出元件都应该有残差。 虽然在函数 yolov2_loss_function 中我首先计算每个元素的残差,然后输出它们的总损失。但是,tensorflow框架是如何知道每个输出元素的残差的呢?
非常感谢。
【问题讨论】:
标签: tensorflow