matlab损失函数出现nan,我的简单损失函数导致了NAN

我为自己写了一个客户损失,但是经过几步之后,损失变成了nan,我的代码是

def my_loss(label_batch, logits_batch, alpha=1.3, beta=0.5):

softmax_logits_batch = tf.nn.softmax(logits_batch, axis=-1)

indices_not_0 = tf.where(tf.not_equal(label_batch, 0)) # not-zero indices

indices_0 = tf.where(tf.equal(label_batch, 0)) # zero indices

predict_not_0 = tf.gather_nd(softmax_logits_batch, indices_not_0)

predict_0 = tf.gather_nd(softmax_logits_batch, indices_0)

avg_p_not_0 = tf.reduce_mean(predict_not_0, axis=0)

avg_p_0 = tf.reduce_mean(predict_0, axis=0)

euclidean_distance = tf.sqrt(tf.reduce_sum(tf.square(avg_p_0 - avg_p_not_0)))

max_value = tf.maximum(alpha - euclidean_distance, 0)

return max_value

2类

.

标签批次的形状为

,其中的所有值都是0或1。logits_批处理的形状是

(?,高,宽,2)

logits_batch的值是

FCN的登录(不带Softmax)

全部的

logits值(

预测?0

预测

)其标签值分别为0或1

指数0

索引\u不\u 0

.

(?,2)

分别计算predict_not_0和predict_0的平均值(表示类别0和类别1的欧几里德空间的中心点坐标)。它们的形状应该是

(2,)

计算两个中心点坐标之间的欧几里德距离,它应该大于一定的

阿尔法

值(例如alpha=1.3)

Epoch[0],step[1],train batch loss = 2.87282,train acc = 0.486435.

Epoch[0],step[2],train batch loss = 2.87282,train acc = 0.485756.

Epoch[0],step[3],train batch loss = 2.87281,train acc = 0.485614.

Epoch[0],step[4],train batch loss = 2.87282,train acc = 0.485649.

Epoch[0],step[5],train batch loss = 2.87282,train acc = 0.485185.

Epoch[0],step[6],train batch loss = 2.87279,train acc = 0.485292.

Epoch[0],step[7],train batch loss = 2.87281,train acc = 0.485222.

Epoch[0],step[8],train batch loss = 2.87282,train acc = 0.484989.

Epoch[0],step[9],train batch loss = 2.87282,train acc = 0.48406.

Epoch[0],step[10],train batch loss = 2.8728,train acc = 0.483306.

Epoch[0],step[11],train batch loss = 2.87281,train acc = 0.483426.

Epoch[0],step[12],train batch loss = 2.8728,train acc = 0.482954.

Epoch[0],step[13],train batch loss = 2.87281,train acc = 0.482535.

Epoch[0],step[14],train batch loss = 2.87281,train acc = 0.482225.

Epoch[0],step[15],train batch loss = 2.87279,train acc = 0.482005.

Epoch[0],step[16],train batch loss = 2.87281,train acc = 0.48182.

Epoch[0],step[17],train batch loss = 2.87282,train acc = 0.48169.

Epoch[0],step[18],train batch loss = 2.8728,train acc = 0.481279.

Epoch[0],step[19],train batch loss = 2.87281,train acc = 0.480878.

Epoch[0],step[20],train batch loss = 2.87281,train acc = 0.480607.

Epoch[0],step[21],train batch loss = 2.87278,train acc = 0.480186.

Epoch[0],step[22],train batch loss = 2.87281,train acc = 0.479925.

Epoch[0],step[23],train batch loss = 2.87282,train acc = 0.479617.

Epoch[0],step[24],train batch loss = 2.87282,train acc = 0.479378.

Epoch[0],step[25],train batch loss = 2.87281,train acc = 0.479496.

Epoch[0],step[26],train batch loss = 2.87281,train acc = 0.479354.

Epoch[0],step[27],train batch loss = 2.87282,train acc = 0.479262.

Epoch[0],step[28],train batch loss = 2.87282,train acc = 0.479308.

Epoch[0],step[29],train batch loss = 2.87282,train acc = 0.479182.

Epoch[0],step[30],train batch loss = 2.22282,train acc = 0.478985.

Epoch[0],step[31],train batch loss = nan,train acc = 0.494112.

Epoch[0],step[32],train batch loss = nan,train acc = 0.508811.

Epoch[0],step[33],train batch loss = nan,train acc = 0.523289.

Epoch[0],step[34],train batch loss = nan,train acc = 0.536233.

Epoch[0],step[35],train batch loss = nan,train acc = 0.548851.

Epoch[0],step[36],train batch loss = nan,train acc = 0.561351.

Epoch[0],step[37],train batch loss = nan,train acc = 0.573149.

Epoch[0],step[38],train batch loss = nan,train acc = 0.584382.

Epoch[0],step[39],train batch loss = nan,train acc = 0.595006.

Epoch[0],step[40],train batch loss = nan,train acc = 0.605065.

Epoch[0],step[41],train batch loss = nan,train acc = 0.614475.

Epoch[0],step[42],train batch loss = nan,train acc = 0.623371.

Epoch[0],step[43],train batch loss = nan,train acc = 0.632092.

Epoch[0],step[44],train batch loss = nan,train acc = 0.640199.

Epoch[0],step[45],train batch loss = nan,train acc = 0.647391.

我以前用了完全相同的代码,只是损失函数是tf.nn.sparse_softmax_cross_熵_with_logits()而且一切正常,所以我想我的新损失函数有问题。

我有一个猜测,也许有些批次数据只有一个类别的标签(只有0或1),所以

预测“不”和“预测”

因此将没有数据,但我不知道如何编写代码来验证是否有数据

预测“不”和“预测”

有人能帮我找出问题出在哪里吗?如何改进我的损失函数来避免nan?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值