我正在构建一个神经网络,该神经网络可用于基于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
设置为{ {1}}(即0
的预测)。如果A
的输出概率比B
大10%且比B
大任意量,并且{{1} }默认为A
,编码为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]
是否可以在损失函数中做我想做的事情?