导入相关库
初始化数据
实现softmax
实现交叉熵损失函数
为了实现交叉熵损失函数,需要先理解下面的例子:
假定有三个类别,0表示苹果,1表示橘子,2表示香蕉。
y[0,2]中的数字表示真实类别,0表示第一个照片真的是苹果,2表示第二个照片真的是香蕉。
这里的y_hat表示预测值,里头存储的是预测的概率,因此y_hat中的数据表示的是判断第一个照片为苹果的概率为0.1,判断为橘子的概率为0.3,香蕉是0.6,第二个照片类似。
y_hat[[0,1],y]=[0.1],[0.5]意思是,算法把第一个图片正确识别为苹果的概率为0.1,把第二个照片正确识别出来的概率是0.5。
交叉熵损失函数计算的就是正确识别的概率
再看看代码:
将预测类别与真实元素y进行比较:
这里沿用的是刚开始用的例子,求得正确预测的数量。用来评估在任意模型net的准确率
计算模型精度
这里回顾一下类的知识点,并且对代码进行解析:
def __init__(self, n):定义了类的构造函数__init__,它接受一个参数n,用于指定累加器中变量的数量。
self.data = [0.0] * n: 创建了一个名为data的实例变量,它是一个包含n个0.0的列表,这里传入的n是2,所以data实例为[0.0,0.0]
def add(self, *args):定义了一个累加函数,并且接受可变数量参数args
self.data = [a + float(b) for a, b in zip(self.data, args)]:使用列表推导式,将传入的参数与累加器中的对应变量相加,并将结果赋值给data。zip(self.data, args)对两个列表的元素进行遍历。
def reset(self):定义了一个将累加器所有变量重置为0的方法。
def __getitem__(self, idx):定义了一个名为__getitem__的特殊方法,用于通过索引操作符[]来访问累加器中的特定变量的值