我有一个用于相机姿势网络的ResNet网络。我已经用1024致密层替换了最终的分类器层,然后将其替换为7致密层(对于xyz,前3层;对四元数,最后4层)。
我的问题是我想将xyz错误和四元数错误记录为两个单独的错误或指标(而不是仅仅表示所有7个绝对错误)。 customer_error(y_true,y_pred)的定制度量标准模板的输入是张量。我不知道如何将输入分成两个不同的xyz和q数组。当张量为空并且没有任何numpy分量时,该函数在编译时运行。
最终我想使用
来获取中值xyz和q的错误中位数= tensorflow_probability.stats.percentile(输入,q = 50,插值='线性')。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用tf.slice()仅提取模型输出的前三个元素。
import tensorflow as tf
# enabling eager mode to demo the slice fn
tf.compat.v1.enable_eager_execution()
import numpy as np
# just creating a random array dimesions size (2, 7)
# where 2 is just an arbitrary value chosen for the batch dimension
out = np.arange(0,14).reshape(2,7)
print(out)
# array([[ 0, 1, 2, 3, 4, 5, 6],
# [ 7, 8, 9, 10, 11, 12, 13]])
# put it in a tf variable
out_tf = tf.Variable(out)
# now using the slice operator
xyz = tf.slice(out_tf, begin=[0, 0], size=[-1,3])
# lets see what it looked like
print(xyz)
# <tf.Tensor: id=11, shape=(2, 3), dtype=int64, numpy=
# array([[0, 1, 2],
# [7, 8, 9]])>
可以将这样的内容包装到自定义指标中,以获取所需的内容。
def xyz_median(y_true, y_pred):
"""get the median of just the X,Y,Z coords
UNTESTED though :)
"""
# slice to get just the xyz
xyz = tf.slice(out_tf, begin=[0, 0], size=[-1,3])
median = tfp.stats.percentile(input, q=50, interpolation='linear')
return median