深度学习与图像识别:原理与实践 笔记Day_16

损失函数

 

1. 均方误差损失函数

调用方法如下:

torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')

参数说明如下:

  • size_average(bool,optional):基本弃用。默认情况下,损失是批次中每个损失元素的平均值。如果将字段size_average设置为False,则需要将每个batch的损失相加。当reduce设置为Fasle时忽略。默认值为True
  • reduce(bool,optional):基本弃用。默认情况下,根据size_average,对每个batch中结果的损失进行平均或求和。当reduce为Fasle时,返回batch中每个元素的损失并忽略size_average。默认值为True
  • reduction(string,optional):输出元素包含3中操作方式,即none,mean和sum。
  1. none:不做处理
  2. mean:输出的总和除以输出中元素的数量
  3. sum:输出的和

2. 交叉熵损失函数

交叉熵损失函数将nn.LogSoftmax()和nn.NLLLoss()合并再一个类中,函数名为CrossEntropyLoss().调用方法如下:

torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100,reduce=None,reduction='mean')

参数说明如下:

  • weight(Tensor,optional):在多分类任务中,手动给出每个类别权重的缩放量 。如果给出,则其是一个大小等于类别个数的张量
  • size_average(bool,optional):已基本弃用,与均方误差损失函数一样
  • ignore_index(int,optional):指定被忽略且不对输入梯度做贡献的目标值。
  • reduce(bool,optional):已基本弃用,与均方误差损失函数一样
  • reduction(bool,optional):输出元素包含3中操作方式,即none,mean和sum。
  1. none:不做处理
  2. mean:输出的总和除以输出中元素的数量
  3. sum:输出的和

注意!!

Pytorch是不支持ont-hot编码类型的,输入的都是真实的target,所以如果输入的真实分类是one-hot编码的话则需要自行转换,即将target ont_hot  的编码格式转换为每个样本的类别,再传给CrossEntropyLoss。实现代码如下:

import numpy as np
import torch
from torch.autograd import Variable
import matplotlib.pyplot as plt
from torch import nn


# 编码one_hot
def one_hot(y):
    '''
    y :(N)的一维Tensor,值为每个样本的类别
    out:
        y_onthot:转换为ont_hot编码格式
    '''
    y = y.view(-1, 1)

    y_onehot = torch.FloatTensor(3, 5)
    # in your for loop
    y_onehot.zero_()
    y_onehot.scatter_(1, y, 1)
    return y_onehot


def cross_entropy_one_hot(target):
    # 解码
    _, labels = target.max(dim=1)
    return labels
    # 如果需要调用cross_entropy,则还需要传入一个input_
    # return F.cross_entropy(input_,labels)


x = np.array([1, 2, 3]).astype(np.int64)
x_tensor = torch.from_numpy(x)
print(one_hot(x_tensor))
x2 = np.array([[0, 1, 0, 0, 0]])
x2_tensor = torch.from_numpy(x2)
print(cross_entropy_one_hot(x2_tensor))

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值