我正在尝试实施吴安德教授为object detection描述的模型(解释从10:00开始)。
他将输出向量的第一个元素描述为检测到对象的概率,然后是匹配对象的边界框的坐标(匹配对象时)。输出向量的最后一部分是模型知道的所有类的softmax。
正如他解释的那样,对于存在检测的情况,使用简单的平方误差就可以了,并且只需 var x = +prompt("iteration count")
for(var i = 0; i < x;i++){
document.write(i)
}
的平方差即可。我知道这是一种幼稚的方法。我只是想将其实现用于学习体验。
y^[0] - y[0]
的这种条件。答案 0 :(得分:1)
如何在张量流中实现这种条件损失?
您可以将损失函数转换为:
Error = mask[0]*(y^[0]-y[0])**2 + mask[1]*(y^[1]-y[1])**2 ... mask[n]*(y^[n]-y[n])**2),
where mask = [1, 1,...1] for y[0] = 1 and [1, 0, ...0] for y[0] = 0
在处理a时,如何处理有关y ^ [0]的条件 批处理。
对于批处理,您可以像下面这样即时构建蒙版:
mask = tf.concat([tf.ones((tf.shape(y)[0],1)),y[:,0][...,None]*y[:,1:]], axis=1)
代码:
y_hat_n = np.array([[3, 3, 3, 3], [3,3,3,3]])
y_1 = np.array([[1, 1, 1, 1], [1,1,1,1]])
y_0 = np.array([[0, 1, 1, 1], [0,1,1,1]])
y = tf.placeholder(tf.float32,[None, 4])
y_hat = tf.placeholder(tf.float32,[None, 4])
mask = tf.concat([tf.ones((tf.shape(y)[0],1)),y[:,0][...,None]*y[:,1:]], axis=1)
error = tf.losses.mean_squared_error(mask*y, mask*y_hat)
with tf.Session() as sess:
print(sess.run([mask,error], {y:y_0, y_hat:y_hat_n}))
print(sess.run([mask,error], {y:y_1, y_hat:y_hat_n}))
# Mask and error
#[array([[1., 0., 0., 0.],
# [1., 0., 0., 0.]], dtype=float32), 2.25]
#[array([[1., 1., 1., 1.],
# [1., 1., 1., 1.]], dtype=float32), 4.0]