如何计算张量流张量中每个切片的均值?

时间:2018-10-24 02:15:32

标签: python tensorflow neural-network

我有一堆图像,张量形状=(?, 64,64)。我正在尝试对每个图像应用蒙版,获取蒙版内像素的平均值,然后将其与使用其他蒙版计算出的平均值进行比较。我将用它来比较均方误差。通常,我会通过遍历切片来计算此值,但tensorflow不允许循环。有什么建议怎么做?

for l in range(NumberOfExams): 
I = images[l,:,:]
    meansRef[l] = I[referenceMasks[l,:,:]]
    meansOut[l] = I[calculatedMasks[l,:,:]]

MSE = np.mean((meansRef - meansOut)**2/meansRef**2)

我已经尝试过使用tf.boolean_mask,它可以基于所有referenceMasks和calculatedMasks给我平均值,但是到目前为止,我尚不清楚如何使用此或其他张量流方法获得每个图像的平均值。

非常感谢。

1 个答案:

答案 0 :(得分:0)

可以使用tf.map_fn对每个图像的掩盖均值进行比较。这将返回对批次中的每个图像进行任意操作的结果,本质上允许循环:

所以:

for l in range(NumberOfExams): 
I = images[l,:,:]
    meansRef[l] = I[referenceMasks[l,:,:]]
    meansOut[l] = I[calculatedMasks[l,:,:]]

MSE = np.mean((meansRef - meansOut)**2) 

可以完成以下操作(可以使用清除操作):

calculatedMasksInf = tf.where(calc_mask > 0.5,Ex,-np.inf * tf.ones_like(calc_mask ))
referenceMasksInf = tf.where(ref_mask > 0.5, Ex, -np.inf * tf.ones_like(ref_mask ))

stiff_means_calculated = tf.map_fn(lambda frame: tf.reduce_mean(tf.boolean_mask(frame,tf.logical_not(tf.is_inf(frame)))), calculatedMasksInf)
stiff_means_reference = tf.map_fn(lambda frame: tf.reduce_mean(tf.boolean_mask(frame,tf.logical_not(tf.is_inf(frame)))), referenceMasksInf)

SqErr = (stiff_means_calculated - stiff_means_reference) ** 2
MSE = tf.reduce_mean(tf.boolean_mask(SqErr,tf.logical_not(tf.is_nan(SqErr))))