仍在学习Tensorflow,我正在尝试在Darkflow的某些代码中更改损失函数
网络输出具有形状[49,3,2]的给定张量。我想在张量的最后部分中取两个元素并用一些代码处理它们。然后我想返回数据。所以有点像地图可以使用Tensorflow。
我正在尝试更改的文件的更多上下文 - https://github.com/thtrieu/darkflow/blob/master/darkflow/net/yolo/train.py。
所以不知道如何做到这一点,请询问更多信息如果我对这个问题不够清楚。我仍然试图了解我想做的事情。
例如
S = 7
SS = S * S
C = 8
B = 3
size1 = [None, SS, C]
size2 = [None, SS, B]
# Extract the coordinate prediction from net.out
coords = net_out[:, SS * (C + B):]
# Take flatten array and make it back into a tensor.
coords = tf.reshape(coords, [-1, SS, B, 4])
wh = tf.pow(coords[:,:,:,2:4], 2) * S # unit: grid cell
area_pred = wh[:,:,:,0] * wh[:,:,:,1] # unit: grid cell^2
centers = coords[:,:,:,0:2] # [batch, SS, B, 2]
floor = centers - (wh * .5) # [batch, SS, B, 2]
ceil = centers + (wh * .5) # [batch, SS, B, 2]
# calculate the intersection areas
# WHAT HAPPENS CURRENTLY
intersect_upleft = tf.maximum(floor, _upleft)
intersect_botright = tf.minimum(ceil , _botright)
intersect_wh = intersect_botright - intersect_upleft
intersect_wh = tf.maximum(intersect_wh, 0.0)
intersect = tf.multiply(intersect_wh[:,:,:,0], intersect_wh[:,:,:,1])
# I WANT TO CALCULATE THE AREA OF INTERSECTION THE BOX DIFFERENTLY SO
I WOULD HAVE
MY OWN FUNCTION DOING SOMETHING. BUT I ONLY WANT IT DONE FOR CENTERS
AND THEN RETURN A BIT LIKE A MAP FUNCTION BUT I NEED IT TO WORK WITH
TENSORFLOW PLACEHOLDERS
任何提示或建议都会很好,谢谢你们:D
答案 0 :(得分:0)
似乎tf.map_fn
功能符合您的需求。 documentation解释了您可以将Python可调用应用于张量或张量序列。
当前文档的摘录,关于函数的主要参数:
fn:要执行的可调用对象。它接受一个参数,它与elems具有相同(可能是嵌套的)结构。如果提供了一个输出,它的输出必须与dtype具有相同的结构,否则它必须具有与elems相同的结构。
elems:一个张量或(可能是嵌套的)张量序列,每个张量都将沿着它们的第一个维度解包。生成的切片的嵌套序列将应用于fn。
此功能可从TensorFlow 0.8获得,因此几乎始终可用。