python 预测平方误差_python - Tensorflow 2.0中的自定义平方误差损失函数 - 堆栈内存溢出...

我正在构建一个神经网络,该网络可用于基于3个S型输出节点的概率进行决策。 我们将这三个选项称为A , B和C 因为决策基于比仅选择3个输出节点中的最高节点更为复杂的逻辑,所以我想实现一个反映决策逻辑的自定义损失函数。 但是,我在实现该功能时遇到问题。

我可能需要更改它,但这是我想使用的函数的初始版本,但使用了numpy数组而不是张量。 首先计算y_pred_new ,然后返回与y_true的平方差。

y_true的值编码为A=0 , B=0和C=2 。 这个想法是,如果A的输出概率比B的输出概率大10%,并且比C的输出概率大任意数量,则y_pred_new设置为0 (即A的预测)。 的预测B的结果,如果B输出概率大于A了10%和大于C通过任何量,并且如果没有,则y_pred_new默认为C ,编码为1 。

def custom_accuracy(y_true, y_pred):

# y_true is a (1,) numpy array

# y_pred is a (3,) numpy array

pred_sum = y_pred.sum()

a_pred = y_pred[0] / pred_sum

b_pred = y_pred[2] / pred_sum

c_pred = y_pred[1] / pred_sum

if a_pred - b_pred > 0.1 and a_pred > c_pred:

y_pred_new = 0

elif b_pred - a_pred > 0.1 and b_pred > c_pred:

y_pred_new = 2

else:

y_pred_new = 1

return (y_true - y_pred_new)**2

custom_accuracy(np.array([0]), np.array([1,0,0])) # prints as [0]

据我了解,处理损失函数内的张量有很多困难。 例如y_pred.numpy()不起作用。 尝试在具有张量的损失函数中实施此错误时,我遇到了另一个错误。

def custom_loss(y_true, y_pred):

K = keras.backend

pred_sum = K.sum(y_pred)

a_pred = y_pred[0] / pred_sum

b_pred = y_pred[2] / pred_sum

c_pred = y_pred[1] / pred_sum

if K.all(K.stack(K.greater(a_pred - b_pred, 0.1), K.greater(a_pred, c_pred))):

y_pred_new = K.variable([0])

elif K.greater(b_pred - a_pred, 0.1) and K.greater(b_pred, c_pred):

y_pred_new = K.variable([2])

else:

y_pred_new = K.variable([1])

return K.pow(y_true - y_pred_new, 2)

例如,使用上面的代码,我得到了错误:

OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function.

是否可以在损失函数中做我想做的事情?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值