# 【python实现卷积神经网络】损失函数的定义（均方误差损失、交叉熵损失）

from __future__ import division
import numpy as np
from mlfromscratch.utils import accuracy_score
from mlfromscratch.deep_learning.activation_functions import Sigmoid

class Loss(object):
def loss(self, y_true, y_pred):
return NotImplementedError()

def gradient(self, y, y_pred):
raise NotImplementedError()

def acc(self, y, y_pred):
return 0

class SquareLoss(Loss):
def __init__(self): pass

def loss(self, y, y_pred):
return 0.5 * np.power((y - y_pred), 2)

def gradient(self, y, y_pred):
return -(y - y_pred)

class CrossEntropy(Loss):
def __init__(self): pass

def loss(self, y, p):
# Avoid division by zero
p = np.clip(p, 1e-15, 1 - 1e-15)
return - y * np.log(p) - (1 - y) * np.log(1 - p)

def acc(self, y, p):
return accuracy_score(np.argmax(y, axis=1), np.argmax(p, axis=1))

def gradient(self, y, p):
# Avoid division by zero
p = np.clip(p, 1e-15, 1 - 1e-15)
return - (y / p) + (1 - y) / (1 - p)

• numpy.clip()：看个例子

import numpy as np
x=np.array([1,2,3,5,6,7,8,9])
np.clip(x,3,8)
array([3, 3, 3, 5, 6, 7, 8, 8])

def accuracy_score(y_true, y_pred):
""" Compare y_true to y_pred and return the accuracy """
accuracy = np.sum(y_true == y_pred, axis=0) / len(y_true)
return accuracy

posted @ 2020-04-16 15:29  西西嘛呦  阅读(2987)  评论(0编辑  收藏  举报