BCELoss
在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵。
先用Sigmoid给这些值都搞到0~1之间:
假设Target是:
BCELoss是
−
1
n
∑
(
y
n
×
ln
x
n
+
(
1
−
y
n
)
×
ln
(
1
−
x
n
)
)
-\frac 1 n\sum(y_n \times \ln x_n+(1-y_n) \times \ln(1-x_n))
−n1∑(yn×lnxn+(1−yn)×ln(1−xn))
其中y是target,x是模型输出的值。
所以对于第一行:
第一列
0
×
ln
0.3992
+
(
1
−
0
)
×
ln
(
1
−
0.3992
)
=
−
0.5095
0 \times \ln 0.3992+ (1-0) \times \ln (1-0.3992)=-0.5095
0×ln0.3992+(1−0)×ln(1−0.3992)=−0.5095
第二列
1
×
ln
0.2232
+
(
1
−
1
)
×
ln
(
1
−
0.2232
)
=
−
1.4997
1 \times \ln 0.2232+ (1-1) \times \ln (1-0.2232)=-1.4997
1×ln0.2232+(1−1)×ln(1−0.2232)=−1.4997
第三列
1
×
ln
0.6435
+
(
1
−
1
)
×
ln
(
1
−
0.6435
)
=
−
0.4408
1 \times \ln 0.6435+ (1-1) \times \ln (1-0.6435)=-0.4408
1×ln0.6435+(1−1)×ln(1−0.6435)=−0.4408
第二行:
第一列
0
×
ln
0.3800
+
(
1
−
0
)
×
ln
(
1
−
0.3800
)
=
−
0.4780
0 \times \ln 0.3800+ (1-0) \times \ln (1-0.3800)=-0.4780
0×ln0.3800+(1−0)×ln(1−0.3800)=−0.4780
第二列
0
×
ln
0.3044
+
(
1
−
0
)
×
ln
(
1
−
0.3044
)
=
−
0.3630
0 \times \ln 0.3044+ (1-0) \times \ln (1-0.3044)=-0.3630
0×ln0.3044+(1−0)×ln(1−0.3044)=−0.3630
第三列
1
×
ln
0.3241
+
(
1
−
1
)
×
ln
(
1
−
0.3241
)
=
−
1.1267
1 \times \ln 0.3241+ (1-1) \times \ln (1-0.3241)=-1.1267
1×ln0.3241+(1−1)×ln(1−0.3241)=−1.1267
第三行:
第一列
1
×
ln
0.6281
+
(
1
−
1
)
×
ln
(
1
−
0.6281
)
=
−
0.4651
1 \times \ln 0.6281+ (1-1) \times \ln (1-0.6281)=-0.4651
1×ln0.6281+(1−1)×ln(1−0.6281)=−0.4651
第二列
0
×
ln
0.4689
+
(
1
−
0
)
×
ln
(
1
−
0.4689
)
=
−
0.6328
0 \times \ln 0.4689+ (1-0) \times \ln (1-0.4689)=-0.6328
0×ln0.4689+(1−0)×ln(1−0.4689)=−0.6328
第三列
1
×
ln
0.3834
+
(
1
−
1
)
×
ln
(
1
−
0.3834
)
=
−
0.9587
1 \times \ln 0.3834+ (1-1) \times \ln (1-0.3834)=-0.9587
1×ln0.3834+(1−1)×ln(1−0.3834)=−0.9587
去掉负号求个均值:
0.5095
+
1.4997
+
0.4408
3
=
0.8167
\frac {0.5095+1.4997+0.4408} {3} = 0.8167
30.5095+1.4997+0.4408=0.8167
0.4780
+
0.3630
+
1.1267
3
=
0.6559
\frac {0.4780+0.3630+1.1267} {3} = 0.6559
30.4780+0.3630+1.1267=0.6559
0.4651
+
0.6328
+
0.9587
3
=
0.6855
\frac {0.4651+0.6328+0.9587} {3} = 0.6855
30.4651+0.6328+0.9587=0.6855
再取个平均:
0.8167
+
0.6559
+
0.6855
3
=
0.7194
\frac {0.8167+0.6559+0.6855} {3} = 0.7194
30.8167+0.6559+0.6855=0.7194
下面我们用BCELoss来验证一下Loss是不是0.7194!
emmm应该是我上面每次都保留4位小数,算到最后误差越来越大差了0.0001。不过也很厉害啦哈哈哈哈哈!
BCEWithLogitsLoss
BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步。我们直接用刚刚的input验证一下是不是0.7193:
嘻嘻,我可真是太厉害啦!
如果你也觉得我很厉害,请打赏以鼓励我做的更好,非常感谢!