在我的Tensorflow模型中,y_pred包含从0到1的概率,而y_true包含0和1的标签。
在我的自定义损失函数中,我想使用4对(或n对)y_true和y_pred连续对的信息。
在numpy中,我可以做类似的事情
y_true=np.array([1,1,1,1,0,0,0,])
y_pred=np.array([0.5,0.5,0.5,0.5,0.2,0.2,0.2,0.2])
def custom_loss(y_true, y_pred):
n=len(t)
res= 0
for i in range(0,n,4):
res += np.sum(y_true[i:i+4])-np.sum(y_pred[i:i+4])
return res
在Tensorflow中是否可以使用张量实现这一目标?
我正在使用Tensorflow 2.2.0和python 3.8
答案 0 :(得分:1)
注意len(y_true) % 4 != 0
的时间:
@tf.function
def custom_loss_tf(y_true, y_pred):
length = tf.shape(y_true)[0]
end_i = length % 4
start_y_true, end_y_true = y_true[:length-end_i], y_true[length-end_i:]
start_y_pred, end_y_pred = y_pred[:length-end_i], y_pred[length-end_i:]
sum_start_y_true = tf.reduce_sum(tf.reshape(start_y_true, (-1,4)), axis=0)
sum_start_y_pred = tf.reduce_sum(tf.reshape(start_y_pred, (-1,4)), axis=0)
res = tf.reduce_sum(tf.cast(sum_start_y_true, tf.float32)) - tf.reduce_sum(tf.cast(sum_start_y_pred, tf.float32))
res_ending = tf.reduce_sum(tf.cast(end_y_true, tf.float32) - tf.cast(end_y_pred, tf.float32))
return res_ending + res
尽管您的函数没有多大意义,但您正在计算总和。你不能把所有东西都加起来吗?