损失函数_交叉熵函数

全文代码

import numpy as np

def jiaochashang(y, t):
    delta = 1e-7
    return -np.sum(t * np.log(y + delta))


# 来点假数据
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]  # 表示神经网络的输出,结果值就是概率
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]  # 表示监督数据,将正确的解的标签打在这个数组上

# 调用均方误差函数试试看
# 在这里的假数据中,2是正确解,测试两个用例,这里第一个表示神经网络的跑出来的结果,跑出来几乎正确,损失函数的值也很高
result = jiaochashang(np.array(y), np.array(t))
print(result)

# 假如神经网络跑出来的结果中7的概率是最高的,现在试试看
y = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0]  # 表示神经网络的输出,结果值就是概率
result = jiaochashang(np.array(y), np.array(t))
print(result)


D:\ANACONDA\envs\pytorch\python.exe C:/Users/Administrator/Desktop/DeepLearning/ch04/wgw_test_lossfunction2.py
0.510825457099338
2.302584092994546

Process finished with exit code 0

实现交叉熵误差函数

def jiaochashang(y, t):
    delta = 1e-7
    return -np.sum(t * np.log(y + delta))

思考损失函数值大小的问题

一个小技术

delta = 1e-7

的加入,可以避免np.log变为负的无穷大

我现在就想试试

D:\ANACONDA\envs\pytorch\python.exe C:/Users/Administrator/Desktop/DeepLearning/ch04/wgw_test_lossfunction2.py
C:/Users/Administrator/Desktop/DeepLearning/ch04/wgw_test_lossfunction2.py:6: RuntimeWarning: divide by zero encountered in log
  return -np.sum(t * np.log(y ))
C:/Users/Administrator/Desktop/DeepLearning/ch04/wgw_test_lossfunction2.py:6: RuntimeWarning: invalid value encountered in multiply
  return -np.sum(t * np.log(y ))
nan
nan

程序正常执行了

  • 退出代码也是0
  • 只是在执行过程中出现了除0的错误

很多时候还是要尽可能的避免这种问题
通过一些方法技巧来做到规避问题

你可能感兴趣的:(深度学习,python,开发语言)