PyTorch: clamp函数与梯度的关系

本文主要以下探究这一点:梯度反向传播过程中,测试强行修改后的预测结果是否还会传递loss?

clamp应用场景:在深度学习计算损失函数的过程中,会有这样一个问题,如果Label是1.0,而预测结果是0.0,则BCE损失中理论上计算出的结果是无穷大的(当然pytorch并不会报错,而是将损失上限设在了100.0),在实际开发过程中,我们一般会使用torch.clamp等函数将预测tensor不符合取值范围的值全部置为最小或最大值。

那对于这些被替换后的元素,他们会在反向传播过程中对网络产生梯度吗?第一想法是没有,因为这些替换后的新值的来源是一个赋值操作,而非通过网络计算出来的,但为了更好的理解,我们来做一个测试。

from torch.nn import functional as F
import torch.nn as nn
import torch
#初始化一个最简单的网络
fc = nn.Linear(in_features=1, out_features=1, bias=True)
fc.weight.data = torch.tensor([[0.01]])
fc.bias.data   = torch.tensor([[0.01]])
input_t = torch.tensor([[1.0]], dtype=torch.float32)
pred    = fc(input_t)
label   = torch.tensor([[1.0]])

这里网络的预测结果为0.02,将其强行截断到0.1,损失的计算仍然是正常的,但是反向传播后,网络的训练参数是没有梯度的,即可以认为这个预测的样本对网络是没有更新作用的,是一个无意义的预测样本

pred = torch.clamp(pred, min=0.1, max=0.9)
loss = F.binary_cross_entropy(pred, label)
print(loss) # tensor(2.3026, grad_fn=<BinaryCrossEntropyBackward>)
loss.backward()
print(fc.weight.grad, fc.bias.grad) #tensor([[0.]]) tensor([[0.]])

 正常的预测结果产生梯度,符合预期。

loss = F.binary_cross_entropy(pred, label)
print(loss) 	 #tensor(3.9120, grad_fn=<BinaryCrossEntropyBackward>)
loss.backward()
print(fc.weight.grad, fc.bias.grad) #tensor([[-50.]]) tensor([[-50.]])

更一般的,假设有n个预测结果,其中有k个值由于torch.clamp等操作被强行修改了值,还剩n - k个预测结果是真实来源于网络,则在梯度反向传播的时候只有这n - k个样本能够成功回传梯度给网络,即便计算的loss是这k个样本产生的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/40372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法】排序+双指针——leetcode三数之和、四数之和

三数之和 &#xff08;1&#xff09;排序双指针 算法思路&#xff1a; 和之前的两数之和类似&#xff0c;我们对暴力枚举进行了一些优化&#xff0c;利用了排序双指针的思路&#xff1a; 我们先排序&#xff0c;然后固定⼀个数 a &#xff0c;接着我们就可以在这个数后面的区间…

Mybatis Plus Interceptor

Mybatis Plus Interceptor 1 获取表名2 获取SQL 1 获取表名 Component public class MybatisInterceptor implements Interceptor {private static final List<String> EXCLUDE_TABLE new ArrayList<>();static {EXCLUDE_TABLE.add("test");}private s…

OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

基于深度学习的运动目标检测&#xff08;一&#xff09; 1.YOLO算法检测流程2.YOLO算法网络架构3.网络训练模型3.1 训练策略3.2 代价函数的设定 2012年&#xff0c;随着深度学习技术的不断突破&#xff0c;开始兴起基于深度学习的目标检测算法的研究浪潮。 2014年&#xff0c;…

电脑突然黑屏的解决办法

记录一次电脑使用问题 问题描述 基本情况&#xff1a;雷神游戏笔记本 windows10操作系统 64位 使用时间 4年 日期&#xff1a;2023年8月11日 当时 电脑充着电 打开了两个浏览器&#xff1a;edge[页面加载5个左右]&#xff0c;火狐[页面加载1个左右] 两个文件夹 一个百度网盘…

Davinci 报表工具 0.3.0-rc release 文本框模糊查询不生效问题

背景: 在使用过程中发现davinci 的控制器配置中, 取值配置的对应关系设置 包含 或 不包含时 不生效, 不能实现模糊匹配效果, 只能精确查询; 问题分析: 通过跟踪接口及相应代码, 发现在sql 拼接时没有对 like 和 not like 类型的值两侧添加百分号, 导致模糊查询失败 调用过程…

CentOS系统环境搭建(七)——Centos7安装MySQL

centos系统环境搭建专栏&#x1f517;点击跳转 坦诚地说&#xff0c;本文中百分之九十的内容都来自于该文章&#x1f517;Linux&#xff1a;CentOS7安装MySQL8&#xff08;详&#xff09;&#xff0c;十分佩服大佬文章结构合理&#xff0c;文笔清晰&#xff0c;我曾经在这篇文章…

Kotlin 使用 View Binding

解决的问题&#xff1a; 《第一行代码——Android》第三版 郭霖 P277 视图绑定的问题 描述&#xff1a; kotlin-android-extensions 插件已经弃用 butter knife 已经弃用 解决办法 推荐使用 View Binding 来代替 findViewById 使用方法 1、配置 build.gradle 2、在act…

踩坑---uni-app中@input 事件不生效

在开发的时候遇到这么一种情况&#xff0c;我们希望input输入框的值是范围是0-100或者保留两位小数之类的&#xff0c;当你输入时处理后的结果却不生效&#xff0c;但是试过很多办法发现都实现不了&#xff0c;最后是按照以下方法解决的,问题原因是uni-app会延时,导致输入的结果…

Go语言的主要优势

Go语言的主要优势包括: 1. 简洁和易学 Go语法简单明了,没有太多晦涩难懂的概念,上手容易,适合快速开发。 2. 强大的并发支持 利用goroutine和channel,可以非常方便地编写高效的并发程序。 3. 执行性能好 Go编译成机器码,执行性能接近C/C,比解释型语言更高效。 4. 内存管…

绝对值函数的可导性

绝对值函数的可导性 声明&#xff1a;下面截图来自《考研数学常考题型解题方法技巧归纳》

利用Figlet工具创建酷炫Linux Centos8服务器-登录欢迎界面-SHELL自动化编译安装代码

因为我们需要生成需要的特定字符,所以需要在当前服务器中安装Figlet,默认没有安装包的,其实如果我们也只要在一台环境中安装,然后需要什么字符只要复制到需要的服务器中,并不需要所有都安装。同样的,我们也可以利用此生成的字符用到脚本运行的开始起头部分,用ECHO分行标…

学习笔记十八:污点、容忍度

污点、容忍度 污点、容忍度管理节点污点把k8snode2当成是生产环境专用的&#xff0c;其他node是测试的给k8snode1也打上污点 污点、容忍度 给了节点选则的主动权&#xff0c;我们给节点打一个污点&#xff0c;不容忍的pod就运行不上来&#xff0c;污点就是定义在节点上的键值属…

使用python读Excel文件并写入另一个xls模版

效果如下&#xff1a; 原文件内容 转化后的内容 大致代码如下&#xff1a; 1. load_it.py #!/usr/bin/env python import re from datetime import datetime from io import BytesIO from pathlib import Path from typing import List, Unionfrom fastapi import HTTPExcep…

睿趣科技:抖音开网店现在做还来得及吗

随着社交媒体的迅速发展&#xff0c;抖音作为一款短视频平台&#xff0c;已经在年轻人中间取得了巨大的成功。而近年来&#xff0c;越来越多的人开始考虑在抖音上开设网店&#xff0c;以迎合这一潮流。那么&#xff0c;抖音开网店现在还来得及吗? 首先&#xff0c;要明确的是&…

一篇文章教会你搭建私人kindle图书馆,并内网穿透实现公网访问

搭建私人kindle图书馆&#xff0c;并内网穿透实现公网访问 在电子书风靡的时期&#xff0c;大部分人都购买了一本电子书&#xff0c;虽然这本电子书更多的时候是被搁置在储物架上吃灰&#xff0c;或者成为盖泡面的神器&#xff0c;但当亚马逊发布消息将放弃电子书在中国的服务…

Kubernetes部署Wordpress时碰到的两个问题解决

文章目录 小结问题1解决问题2解决参考 小结 在使用Kubernetes部署Wordpress时返回了两个问题: Function not implemented: AH00141: Could not initialize random number generator chown: changing ownership of .: Operation not permitted 对这个两个返回错误&#xff0…

利用Python隧道爬虫ip轻松构建全局爬虫网络

嘿&#xff0c;爬虫程序员们&#xff01;你们有没有碰到过需要大规模数据爬取的情况&#xff1f;也许你们之前遇到过网站的反爬措施&#xff0c;卡住你们的进度。别担心&#xff0c;今天我来分享一个利用Python隧道爬虫ip实现的方法&#xff0c;帮助你们轻松搭建全局爬虫ip网络…

jmeter界面设置为中文

jmeter版本&#xff1a;5.6.2 找到jmeter下的bin目录&#xff0c;打开jmeter.properties 文件 第39行修改为 languagezh_CN去掉前面的#&#xff0c;以后打开就是中文界面了

IC设计仿真云架构

对于IC仿真来说&#xff0c;最重要的是要安全、可维护、高性能的的HPC环境环境。 那么云上如何搭建起一套完整的IC仿真云环境呢&#xff1f; 这种架构应该长什么样子&#xff1f; 桌面虚拟化基础架构 将所有桌面虚拟机在数据中心进行托管并统一管理&#xff1b;同时用户能够…

RxJava 复刻简版之三,map 多次中转数据

案例代码&#xff1a;https://gitee.com/bobidali/lite-rx-java/commit/292e9227a5491f7ec6a07f395292ef8e6ff69290 RxJava 的调用第一步是封装了观察者接受了数据的处理&#xff0c;进一步就是使用 map 将数据操作传递给上下游 1、类似Observer.create 创建一个简单的观察者…