PyTorch(12)---损失函数和反向传播

损失函数

1、计算实际输出和目标之间的差距 2、为更新输出提供一定的依据(反向传播),调优的参数是卷积核当中的参数 ,为卷积核当中的参数设置了梯度grad。将整个loss降低。

L1Loss

相减后的绝对值,要么取平均,要么求和。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数:reducion可选择sum、mean等。
L1Loss(reduction=‘sum’)

X=1,2,3
Y=1,2,5
L1loss=(0+0+1)/3=0.6

MSELOSS

平方差
在这里插入图片描述

交叉熵CROSSENTROPYLOSS

用于分类问题
在这里插入图片描述
在这里插入图片描述

参数:
Input:分的类别
Target:目标

import torch
from torch.nn import L1Loss
from torch.nn import MSELoss,CrossEntropyLoss

inputs=torch.tensor([1,2,3],dtype=torch.float32)
targets=torch.tensor([1,2,5],dtype=torch.float32)
inputs=torch.reshape(inputs,(1,1,1,3),)
targets=torch.reshape(targets,(1,1,1,3),)

loss=L1Loss(reduction='sum')
result=loss(inputs,targets)

loss_mse=MSELoss()
result_mse=loss_mse(inputs,targets)
print('L1loss:{}'.format(result))
print('mse:{}'.format(result_mse))

#三分类问题
x=torch.tensor([0.1,0.2,0.3])  #分成第一类的概率是0.1 分成第二类的概率是0.2 分成第三类的概率是0.3
print('x:{}'.format(x))
y=torch.tensor([1])
x=torch.reshape(x,(1,3)) #1是batch_size 3是class
loss_cross=CrossEntropyLoss()
result_cross=loss_cross(x,y)
print('CrossEntropyLoss:{}'.format(result_cross))

结果:
在这里插入图片描述

反向传播

反向传播是为了将损失函数(目标函数)变小。
反向传播backward
前向传播forward

import torchvision
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.data import DataLoader


dataset=torchvision.datasets.CIFAR10("dataset_CIFAR10",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=1)


class Demo(nn.Module):
    def __init__(self) -> None:
        super().__init__()
        self.model1=Sequential(
            Conv2d(in_channels=3, out_channels=32, kernel_size=5, stride=1, padding=2, dilation=1, ),
            MaxPool2d(kernel_size=2, ),
            Conv2d(in_channels=32, out_channels=32, kernel_size=5, stride=1, padding=2, ),
            MaxPool2d(kernel_size=2),
            Conv2d(32, 64, 5, 1, 2),
            MaxPool2d(2),
            Flatten(),
            Linear(1024, 64),
            Linear(64, 10),
        )
    def forward(self,x):
        x=self.model1(x)
        return x
loss=nn.CrossEntropyLoss()
demo=Demo()

for data in dataloader:
    imgs,targets=data
    #送入网络进行训练
    outputs=demo(imgs)
    #输出的结果是10分类
    #print(outputs)
    #输出真实的标签
    #print(targets)
    '''损失函数'''
    result_loss=loss(outputs,targets)
    #反向传播,算出梯度(梯度下降法),求出最小的loss
    result_loss.backward()
    print(result_loss)

在这里插入图片描述

在这里插入图片描述
反向传播后才会有grag参数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫听穿林打叶声@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值