均方误差
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/2/28 18:30
# @Author : LZQ
# @Software: PyCharm
# 公式含义 E = 0.5*sum(yk-tk)**2
# yk是表示神经网络的输出, tk表示监督数据, k表示数据的维数
import numpy as np
# 定义均方误差函数
def mean_squared_error(y,t):
return 0.5*np.sum((y-t)**2)
# 测试
# 设2为正解
t=[0,0,1,0,0,0,0,0,0,0]
# "2"的概论最高的情况(0.6)
y=[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
y2=[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
error_result=mean_squared_error(np.array(y),np.array(t))
error_result2=mean_squared_error(np.array(y2),np.array(t))
print("均方误差")
print(error_result)
print(error_result2)
交叉熵误差
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/2/28 20:06
# @Author : LZQ
# @Software: PyCharm
# 交叉熵误差 公式:E= - sum(tk log yk)
# log表示以e为底数的自然对数(log e)。 yk是神经网络的输出, tk是
# # 正确解标签。
import numpy as np
def cross_entropy_error(y,t):
delta=1e-7
return -np.sum(t*np.log(y+delta))
'''
这里,参数y和t是NumPy数组。函数内部在计算np.log时,加上了一
个微小值delta。这是因为,当出现np.log(0)时, np.log(0)会变为负无限大
的-inf,这样一来就会导致后续计算无法进行。作为保护性对策,添加一个
微小值可以防止负无限大的发生。
'''
# 测试
t=[0,0,1,0,0,0,0,0,0,0]
y=[0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
y2=[0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]
print("交叉熵误差")
print(cross_entropy_error(np.array(y),np.array(t)))
print(cross_entropy_error(np.array(y2),np.array(t)))