pytorch下可训练分段函数的写法


这篇博客主要讲如何写一个可训练求导的分段函数,并通过代码验证其可行性


假设我们要实现这样一个分段函数:

F(a)={+1a>2.50.25∗a+0.3750.5<a≤2.5a−0.5<a≤0.50.25∗a−0.375−2.5<a≤−0.5−1a≤−2.5F(a)=\left\{ \begin{array}{rcl} +1 & & {a > 2.5}\\ 0.25*a + 0.375 & & {0.5 < a \leq 2.5}\\ a & & {-0.5 < a \leq 0.5}\\ 0.25*a - 0.375 & & {-2.5 < a \leq -0.5}\\ -1 & & {a \leq -2.5} \end{array} \right. F(a)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧​+10.25∗a+0.375a0.25∗a−0.375−1​​a>2.50.5<a≤2.5−0.5<a≤0.5−2.5<a≤−0.5a≤−2.5​

首先我们生成一个分布涵盖这5个区间的张量:

import torch
a = torch.tensor([-3, -1.5, 0.1, 2.3, 5])
a.requires_grad = True

第二步,分别求出他们的区间:

b1 = a <= -2.5
b2 = (a <= -0.5)  & (a > -2.5)
b3 = (a <= 0.5) & (a > - 0.5)
b4 = (a <= 2.5) & (a >  0.5)
b5 = a > 2.5

运行结果如图所示

符合区间的条件的位置为TRUE,不符合的为FALSE

第三步,五种分段函数的计算:

a1 = -1
a2 = 0.25 * a - 0.375
a3 = a
a4 = 0.25 * a + 0.375
a5 = 1a1 = a1 * b1  #和对应区间相乘
a2 = a2 * b2
a3 = a3 * b3
a4 = a4 * b4
a5 = a5 * b5

运行结果如图所示

这样,函数计算的值只在自己的区间内有效,其余地方为0;最后我们再将这五个加起来就完成了分段函数的计算:

c = a1 + a2 + a3 + a4 + a5

运行结果如图所示

接下来我们通过反向求导验算一下:

c.backward(torch.tensor([1.,1.,1.,1.,1.]))

backward()中参数的含义,可以参考这篇博客:Pytorch中loss.backward(),loss为矢量时,对参数的理解

ok,我们输出a的梯度试试


验算正确,这样就实现了pytorch下分段函数的可训练

pytorch下可训练分段函数的写法相关推荐

  1. PyTorch下的可视化工具(网络结构/训练过程可视化)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者 | 锦恢@知乎 来源 | https://zhuanlan.z ...

  2. 【NOI2019】 机器人 【区间dp】【插值】【下降幂多项式】【分段函数】

    题意:有个长度为nnn的序列aaa,ai∈[Li,Ri]a_i\in [L_i,R_i]ai​∈[Li​,Ri​].从一个位置sss可以往左直到≥as\geq a_s≥as​,往右直到>as&g ...

  3. python函数调用自身后果_python 写函数在一定条件下需要调用自身时的写法说明...

    例如以下这个函数:state = 1 def set_state(state): while state: set = int(input('请输入9或5,显示"hello world&qu ...

  4. c语言简单分段函数用多路分支与if else 级联的写法

    一,简单分段函数 f(x)= -1 (  X<0 ) 0     (X=0) 2x     (X>0) 二.代码 1.多路分支代码 int main() {  int i;  double ...

  5. 分段函数返回字符c语言,C++对cin输入字符的判断及分段函数处理方法示例

    本文实例讲述了C++对cin输入字符的判断及分段函数处理方法.分享给大家供大家参考,具体如下: 这两个本来也不是什么问题,然而真正遇到还是有地方可以研究的.首先是C++对于cin输入的判断,有时候你定 ...

  6. 分段函数的期望和方差_概率论中数学期望什么时候不存在?

    很多考生对数学的复习不是有很清晰的认识,其实现在可以真正的开始了第一轮的复习.在第一轮的复习中有以下四大框架可以推荐给广大考生. 1. 注意基本概念.基本方法和基本定理的复习掌握 结合考研辅导书和大纲 ...

  7. 从两道基础二分算法题谈check函数的写法

    第一题:愤怒的牛 loj链接 两道题目都是基础二分的模板题,先看第一题,题意为总共有nnn间牛舍,mmm头牛,要将mmm头牛安排在nnn间牛舍,为防止牛互相攻击,使两头牛之间的最小距离最大!最大! 最 ...

  8. pt->onnx->ncnn(pytorch部署自己训练的模型)

    pt->onnx->ncnn(pytorch部署自己训练的模型) yolov6似乎有部分操作ncnn不支持,需要改一下网络结构,所以这里使用 yolov7-tiny 首先,找一个目标检测的 ...

  9. python编写一计票程序,键盘输入候选人姓名(输入“#”结束),使用字典存储并统计出候选人得票数。python实现分段函数。

    一.编程题目         编程题目1:python编写一计票程序,键盘输入候选人姓名(输入"#"结束),使用字典存储并统计出候选人得票数.        编程题目2:pytho ...

  10. PFENet数据加载、训练、pascal5i不同的5类验证测试、添加训练曲线函数

    论文地址:https://arxiv.org/abs/2008.01449 作者代码:https://github.com/dvlab-research/PFENet 一.数据加载dataset (先 ...

最新文章

  1. 强烈安利8个高质量的办公软件,提高你的办公效率
  2. 山海树“医+药”O2O闭环 掘金8万亿市场
  3. vue点击按钮切换显示不同内容_邂逅Vue
  4. [html] 你觉得写Html难吗?难在哪?为什么?
  5. 计算机用于数据管理经历了,管理系统中计算机应用--期中测验答案
  6. 手机python编程文件如何转文档_Python 开发者面向文档编程的正确姿势
  7. Win10开机一直转圈圈怎么办?一直转圈进不去系统的解决方法
  8. 如何让自定义Dialog上下居中
  9. 计算机械效率的公式四种,功功率机械效率复习题超全
  10. hdu1426 Sudoku Killer
  11. 常州儿童计算机培训,常州推荐儿童编程培训班哪几家靠谱
  12. NYOJ题目91-阶乘之和
  13. SpringBoot实战笔记:记一次接口406错误的解决
  14. 天涯海客邮件搜索群发大师 使用说明
  15. 当成人网站遇上机器学习
  16. 基于proteus的计数器设计
  17. HDu--我要拿走你的蜡烛
  18. 企业邮箱使用安全注意事项
  19. 安全总结(一)--一键彻底关闭Win10自带Windows Defender杀毒软件
  20. 思维导图到底是什么-图说思维导图定义

热门文章

  1. iOS开发之如何保证控件位置不变,增加触控范围(即frame和bounds的区别)
  2. 登顶多国免费榜,Zynga能否依靠超休闲游戏重回巨头行列
  3. Js学习心得和思考方法
  4. Flutter 实现整个App变为灰色
  5. Java 中Calendar的使用
  6. 用JScript编写命令行程序
  7. android 手机内存分配,【扫盲贴』关于android手机中RAM(也就是 运行内存)的分配...
  8. 资本运作/自我投资--哪项需要优先?
  9. ios开发学习- 简易音乐播放器2 (基于iPhone4s屏幕尺寸)-- 歌词解析--plist文件应用--imageNamed图片加载耗内存...
  10. [漏洞挖掘]SRC-泛微OA文件上传