本文是接着上一篇深度学习之 6 线性回归实现_水w的博客-CSDN博客
目录
3、常用损失函数
(1)平均绝对误差 (MAE):
'''◼ torch.nn中的实现'''
loss = nn.L1Loss()
(2)均方误差 (MSE):
'''◼ torch.nn中的实现'''
loss = nn.MSELoss()
(3)二元交叉熵损失函数:
'''◼ torch.nn中的实现'''
loss = nn.BCELoss ()
(4)包含sigmoid层的二元交叉熵损失函数 :
'''◼ torch.nn中的实现'''
loss = nn.BCEWithLogitsLoss() # 包含了sigmoid运算
(5)交叉熵损失函数:
'''◼ 手动交叉熵损失函数的实现:'''
# 交叉熵损失函数
def cross_entropy(y_hat, y):
"""
Parameters
----------
y_hat: 预测值,shape is (batch_size, class_num)
y: 真值,shape is (batch_size, )
Returns
-------
"""
return - torch.log(y_hat.gather(1, y.view(-1, 1)))
'''◼ torch.nn中的实现'''
1 loss = nn.CrossEntropyLoss()
值得注意的是, 分开定义 𝐬𝐨𝐟𝐭𝐦𝐚𝐱 运算和交叉熵损失函数可能会造成数值不稳定。 因此,PyTorch提供了一个包括 𝐬𝐨𝐟𝐭𝐦𝐚𝐱 运算和交叉熵损失计算的函数。它的数值稳定性更好。所以在输出层,我们不需要再进行 𝐬𝐨𝐟𝐭𝐦𝐚𝐱 操作:![]()
4、模型预测及评价(分类问题)
对于分类问题,给定任一样本特征,模型可以预测每个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。我们使用准确率(accuracy)来评价模型的表现。它等于正确预测数量与总预测数量之比。
'''◼ 下面我们给出准确率计算函数的实现'''
def accuracy(y_hat, y):
# 如果真实值y和预测值y_hat相等,那么我们就计算一次,否则不计算
return (y_hat.argmax(dim=1) == y).float().mean().item()
'''◼ 评价模型 𝐧𝐞𝐭 在数据集 𝐝𝐚𝐭𝐚_𝐢𝐭𝐞𝐫 上的准确率'''
def evaluate_accuracy(data_iter, net):
acc_sum, n = 0.0, 0 # 刚开始准确计算个数和总共预测的个数都是0
for X, y in data_iter: # 迭代器的读取
# 如果预测准确,那么acc_sum和n都+1;如果不相等,则acc_sum不+1,n+1
acc_sum += (net(X).argmax(dim=1) == y).float().sum().item()
n += y.shape[0]
return acc_sum / n