有损失的Tensorflow NAN

2024-05-08 00:19:45 发布

您现在位置:Python中文网/ 问答频道 /正文

在我使用了自己设计的损失函数后,损失在第一批变成了NAN。在

我的网络是Resnet,我认为它是好的,因为我训练它与softmax损失。在

这是我的“损失”:

def loss2(logits,labels):
    logit_t = tf.transpose(logits)

    logits2 = tf.multiply(logits,logits)
    sum1 = tf.reduce_sum(logits2,1)
    sum1_t = tf.transpose(sum1)
    product = tf.matmul(logits,logit_t)
    sum_2 = sum1 + sum1_t
    H = sum_2 - product

    mean = tf.reduce_mean(H)
    H = tf.exp(-H/mean+1e-10) 

    kv,ki = tf.nn.top_k(H,5)
    kmin = tf.reduce_min(kv,axis = 1)[:,None]

    new_mat = tf.where(H<kmin,tf.zeros_like(H),tf.ones_like(H))
    H_top = tf.multiply(H,new_mat)
    H_top_t = tf.transpose(H_top)
    #H_top_t = tf.transpose(H_top)
    H_top_sum = tf.reduce_sum(H_top,1)
    H_top_de = tf.diag(H_top_sum)
    H_top_deinv = tf.diag(1/H_top_sum)

    w = [0.6,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04,0.04]
    #w = [0.6,0.04,0.04,0.04,0.04,0.04,0.04,0.04]
    w = tf.convert_to_tensor(w)
    W = tf.diag(w)
    H_top_devec = tf.matmul(H_top,W)
    H_top_devec = tf.reduce_sum(H_top_devec,1)
    H_top_dvinv2 = tf.sqrt(H_top_devec)
    H_top_dvinv2 = tf.diag(H_top_dvinv2)

    theta = tf.matmul(H_top_dvinv2,H_top_t)
    theta = tf.matmul(theta,W)
    theta = tf.matmul(theta,H_top_deinv)
    theta = tf.matmul(theta,H_top)
    theta = tf.matmul(theta,H_top_dvinv2)

    temp2 = tf.ones_like(w)
    f = 0.01*(tf.diag(temp2)-theta)

    y = [[1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]]
    #y=[[1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0]]
    y = tf.convert_to_tensor(y)
    y = tf.transpose(y)
    f = tf.matrix_inverse(f)
    f = tf.matmul(f,y)
    f_t = tf.transpose(f)
    omiga = tf.matmul(f_t,(tf.ones_like(theta)-theta))
    omiga = tf.matmul(omiga,f)

    loss1 = omiga+0.01*tf.square(f-y)
    return loss1

我只想知道,哪一步的损失可能会导致损失变成楠…以及如何找到它。在

请帮帮我!谢谢!!!在


Tags: reducetftoplikediagsumtranspose损失