我正在尝试使用自定义损失函数。我现在使用的是TF 2.x,默认情况下,急切执行处于打开状态。我对TF 1.x非常满意,但是遇到了太多问题。除了使用tf.py_function()包装函数外,还有其他选择吗?如果没有,我将如何包装呢?
通用:具有自定义损失功能的自动编码器,可围绕异常的排名差异进行构建。目前,我仅使用scipy stats rankdata,但将来会有所改变。
张量形状: n,x,x,1
n 个图像,每个图像为 x,x 暗。 因此,我想在所有 n 个图像的每对 orig,pred 上运行此自定义损失函数。
常规算法:
import scipy.stats as ss
def rank_loss(orig, pred):
orig_arr = orig.numpy() # want x,x,1
pred_arr = pred.numpy()
orig_rank = (ss.rankdata(orig_arr)) # returns flat array of length size of array
pred_rank = (ss.rankdata(pred_arr))
distance_diff = 0
for i in range(len(orig_rank)): # gets sum of rank differences
distance_diff = abs(orig_rank[i] - pred_rank[i])
return distance_diff
如果无法执行此操作,是否仅限于可用的tf.<funcs>
或如何将张量作为某种形式的数组拉出,以便可以跨两个张量运行比较计算?
我也看过tf.make_ndarray
,但这似乎并不适用。