P17 激活函数与Loss 梯度

文章详细介绍了softmax函数的定义,特别是梯度推导过程,当i=j时的特殊情况,并提供了使用PyTorch进行softmax及反向传播的代码示例。在实践中,确保在调用backward()方法时,输出张量是一个标量。
摘要由CSDN通过智能技术生成

前言

参考 https://www.bilibili.com/video/BV12B4y1k7b5?p=40&vd_source=a624c4a1aea4b867c580cc82f03c1745

这里面重点介绍了一下softmax 定义, 梯度求导过程,以及对应的PyTorch code。


一 softMax

1: softMax的梯度推导

1.1 函数定义:

1.2 复合函数求导定义

1.3 推导过程

当 i == j

1.4 结果


二 对应代码

# -*- coding: utf-8 -*-
"""
Created on Mon Feb 13 21:28:26 2023

@author: cxf
"""

import torch
import torch.nn.functional as F

def grad():
    
    a = torch.rand(3) #
    a.requires_grad_()
    print("\n a ",a)
    
    p = F.softmax(a,dim=0)
    print("\n p",p)
    
    
    p[0].backward()
    print(a.grad)
    
    

if __name__ == "__main__":
    
    grad()

softmax Backward时候,输出的张量必须是Scaler,size为(1,1)否则会出现如下错误

"grad can be implicitly created only for scalar outputs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值