focalloss函数

import numpy as np

def focalloss(p, y, gamma=5):    
    # https://blog.csdn.net/JNingWei/article/details/80038594
    # https://www.cnblogs.com/king-lps/p/9497836.html        
    r = -(1 - p) ** gamma * np.log(np.maximum(1e-8, p)) * y
    r+=  - p ** gamma * np.log( np.maximum(1e-8, 1 - p)) * (1 - y ) 
    return r


def logloss(p, y):        
    r = -np.log(np.maximum(1e-8, p)) * y
    r+= -np.log( np.maximum(1e-8, 1 - p)) * (1 - y ) 
    return r

#%%

p = np.arange(101) / 100

y1 =  np.ones_like(p)
y2 =  np.zeros_like(p)


#%%
from pylab import plt
plt.figure(figsize=(14, 10), dpi=300)

plt.plot(p, focalloss(p, y1, 0.5), 'y-',
         p, focalloss(p, y1, 1), 'b-',
         p, focalloss(p, y1, 3), 'r--',
         p, focalloss(p, y1, 5), 'g-.',
         p, focalloss(p, y1, 0), 'g-*',
         p, logloss(p, y1), 'y--',
         p, logloss(p, y2), 'y-',
         p, focalloss(p, y2, 5), 'g-.',
         )
plt.ylim((-0.1, 5))
plt.xlim((-0.01, 1))
plt.legend(['gamma = 0.5', 'gamma = 1','gamma = 3', 'gamma = 5','gamma = 0',
            'logloss', 'logloss y2', 'y2 = 5'])

posted @ 2020-08-28 16:14  bregman  阅读(249)  评论(0编辑  收藏  举报