【机器学习】Zygote.jl

news2024/9/23 5:30:55

Zygote.jl

Zygote 是 Julia语言的微分项目,并且被 Flux.jl 收录作为机器学习训练环节中,执行所有梯度,雅可比矩阵等计算过程。

安装

]add Zygote

计算导数

f ( x ) = x 2 f(x)=x^2 f(x)=x2, x = 5 x=5 x=5

using Zygote
gradient(x -> x^2, 5)

(10.0,)

计算梯度

f ( a , b ) = a b f(a,b)=ab f(a,b)=ab, a = 2 , b = 3 a=2,b=3 a=2,b=3

gradient((a, b) -> a*b, 2, -3)

(-3.0, 2.0)
f ( W ) = W b f(W)=Wb f(W)=Wb

W = rand(2, 3); x = rand(3);
gradient(W -> sum(W*x), W)[1]

2×3 Array{Float64,2}:
0.0462002 0.817608 0.979036
0.0462002 0.817608 0.979036

f ( x ) = 3 x 2 + 2 x + 1 f(x)=3x^2+2x+1 f(x)=3x2+2x+1, x = 1 4 x=\frac{1}{4} x=41 要求有理数.

gradient(x -> 3x^2 + 2x + 1, 1//4)

(7//2,)

控制流结构

f ( x ) = x 3 f(x)=x^3 f(x)=x3, x = 5 x=5 x=5

 function pow(x, n)
         r = 1
         for i = 1:n
           r *= x
         end
         return r
       end

pow (generic function with 1 method)

gradient(x -> pow(x, 3), 5)

(75.0,)

字典结构

f ( x ) = x 2 f(x)=x^2 f(x)=x2, x = 5 x=5 x=5

d = Dict()

Dict{Any, Any}()

gradient(5) do x
         d[:x] = x
         d[:x] * d[:x]
       end

(10.0,)

d[:x]

5

结构与类型

定义结构 “Point”, 包括两个分量 Point.x, Point.y
并定义向量的加法与减法运算,以向量的欧式范数的平方作为目标函数
f ( P ) = P . x 2 + P . y 2 f(P)=\sqrt{P.x^2+P.y^2} f(P)=P.x2+P.y2

import Base: +, -
struct Point
  x::Float64
  y::Float64
end
a::Point + b::Point = Point(a.x + b.x, a.y + b.y)
a::Point - b::Point = Point(a.x - b.x, a.y - b.y)
dist(p::Point) = sqrt(p.x^2 + p.y^2)
a = Point(1, 2)

Point(1.0, 2.0)

b = Point(3, 4)

Point(3.0, 4.0)

dist(a + b)

7.211102550927978

gradient(a -> dist(a + b), a)[1]

(x = 0.5547001962252291, y = 0.8320502943378437)

雅可比矩阵

考虑映射 f ( a ) = 100 ( a 1 2 , a 2 2 , a 3 2 , 0 , 0 , 0 , 0 ) f(a)=100(a_1^2,a_2^2,a_3^2,0,0,0,0) f(a)=100(a12,a22,a32,0,0,0,0), 在点 ( 1 , 2 , 3 , 4 , 5 , 6 , 7 ) (1,2,3,4,5,6,7) (1,2,3,4,5,6,7) 处的雅克比矩阵。

jacobian(a -> 100*a[1:3].^2, 1:7)[1] 

3×7 Matrix{Int64}:
200 0 0 0 0 0 0
0 400 0 0 0 0 0
0 0 600 0 0 0 0
考虑映射 f ( a , x ) = ( a 1 2 x , a 2 2 x , a 3 2 x ) f(a,x)=(a_1^2x,a_2^2x,a_3^2x) f(a,x)=(a12x,a22x,a32x), 在点 a = ( 1 , 2 , 3 ) , x = 1 a=(1,2,3),x=1 a=(1,2,3),x=1 处的雅克比矩阵。

jacobian((a,x) -> a.^2 .* x, [1,2,3], 1)

([2 0 0; 0 4 0; 0 0 6], [1, 4, 9])

考虑映射 f ( a , d ) = ( a 11 a 12 a 21 a 22 a 31 a 32 ) f(a,d)=\left(\begin{matrix} a_{11}a_{12}\\ a_{21}a_{22}\\ a_{31}a_{32}\end{matrix}\right) f(a,d)=a11a12a21a22a31a32 a = ( 1 2 3 4 5 6 ) a=\left(\begin{matrix} 1& 2\\3& 4\\5&6\end{matrix}\right) a=135246, d = 2 d=2 d=2

jacobian((a,d) -> prod(a, dims=d), [1 2; 3 4; 5 6], 2)

([2 0 … 0 0; 0 4 … 3 0; 0 0 … 0 5], [0, 0, 0])

除了数与抽象数组,其他类型的微分结果都是 Nothing, 其他类型包括字符,字符串,元组等等。

Hesse 矩阵 (Hessian)

求二元函数 f ( x ) = x 1 x 2 f(x)=x_1x_2 f(x)=x1x2 的 Hesse 矩阵

hessian(x -> x[1]*x[2], randn(2))

2×2 Matrix{Float64}:
0.0 1.0
1.0 0.0

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

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

相关文章

linux强制关闭再启动后zookeeper无法启动

1、若开启了zkserver就先关闭zkserver 查看zkserver是否启动 sh zkServer.sh status关闭zkServer sh zkServer.sh stop2、更改conf/zoo.cfg 将这里的启动端口改为2183 3、启动zkServer sh zkServer.sh start4、以2183端口启动zkCli zkCli.sh -server 127.0.0.1:2183这样启…

传知代码-基于多尺度动态卷积的图像分类

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 在计算机视觉领域,图像分类是非常重要的任务之一。近年来,深度学习的兴起极大提升了图像分类的精度和效率。本文将介绍一种基于动态卷积网络(Dynamic Convolutional Netw…

机器人机构、制造

简单整理一下,在学习了一些运动学和动力学之类的东西,简单的整合了一些常用的机械结构和图片。 1.电机: 市面上的电机有:直流电机,交流电机,舵机,步进电机,电缸,无刷电…

【无人机设计与控制】 基于matlab的蚁群算法优化无人机uav巡检

摘要 本文使用蚁群算法(ACO)优化无人机(UAV)巡检路径。无人机巡检任务要求高效覆盖特定区域,以最小化能源消耗和时间。本研究提出的算法通过仿生蚁群算法优化巡检路径,在全局搜索和局部搜索中平衡探索与开…

【软件工程】成本效益分析

一、成本分析目的 二、成本估算方法 三、成本效益分析方法 课堂小结 例题 选择题

深度之眼(三十)——pytorch(一)--深入浅出pytorch(附安装流程)

文章目录 一、前言一、pytoch二、六个部分三、如何学习四、学习路径(重要)五、安装pytorch5.1 坑15.2 坑2 一、前言 我看了下目录 第一章和第二章都是本科学的数字图像处理。 也就是这一专栏:数字图像实验。 所以就不准备学习前两章了,直接…

一文详解大语言模型Transformer结构

目录 1. 什么是Transformer 2. Transformer结构 2.1 总体结构 2.2 Encoder层结构 2.3 Decoder层结构 2.4 动态流程图 3. Transformer为什么需要进行Multi-head Attention 4. Transformer相比于RNN/LSTM,有什么优势?为什么? 5. 为什么说Transf…

MySQL --数据类型

文章目录 1.数据类型分类2.数值类型2.1 tinyint类型2.2 bit类型2.3小数类型2.31float2.32decimal 3.字符串类型3.1 char3.2varchar3.3 char和varchar比较 4.日期和时间类型5.enum和set 1.数据类型分类 2.数值类型 2.1 tinyint类型 数值越界测试: create table tt1…

C++ Qt 之 QPushButton 好看的样式效果实践

文章目录 1.前序2.效果演示3.代码如下 1.前序 启发于 edge 更新 web 页面,觉得人家做的体验挺好 决定在Qt实现,方便以后使用 2.效果演示 特性介绍: 默认蓝色鼠标移入 渐变色,鼠标变为小手鼠标移出 恢复蓝色,鼠标恢…

计算机毕业设计之:基于uni-app的校园活动信息共享系统设计与实现(三端开发,安卓前端+网站前端+网站后端)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

006——队列

队列: 一种受限的线性表(线性逻辑结构),只允许在一段进行添加操作,在另一端只允许进行删除操作,中间位置不可操作,入队的一端被称为队尾,出队的一端被称为队头,在而我们…

作业报告┭┮﹏┭┮(Android反调试)

一:Android反调试 主要是用来防止IDA进行附加的,主要的方法思路就是,判断自身是否有父进程,判断是否端口被监听,然后通过调用so文件中的线程进行监视,这个线程开启一般JNI_OnLoad中进行开启的。但是这个是…

Java语言程序设计基础篇_编程练习题**18.31 (替换单词)

目录 题目:**18.31 (替换单词) 习题思路 代码示例 运行结果 替换前 替换后 题目:**18.31 (替换单词) 编写一个程序,递归地用一个新单词替换某个目录下的所有文件中出现的某个单词。从命令行如下传递参数: java Exercise18…

C++标准库双向链表 list 中的insert函数实现。

CPrimer中文版(第五版): //运行时错误:迭代器表示要拷贝的范围,不能指向与目的位置相同的容器 slist.insert(slist.begin(),slist.begin(),slist.end()); 如果我们传递给insert一对迭代器,它们不能…

【有啥问啥】深度剖析:大模型AI时代下的推理路径创新应用方法论

深度剖析:大模型AI时代下的推理路径创新应用方法论 随着大规模预训练模型(Large Pretrained Models, LPMs)和生成式人工智能的迅速发展,AI 在多领域的推理能力大幅提升,尤其是在自然语言处理、计算机视觉和自动决策领…

【C++11】异常处理

目录 一、异常的引入 二、C异常的关键字 三、异常的抛出与处理规则 四、异常缺陷的处理 五、自定义异常体系 六、异常规范 七、异常安全 八、异常的优缺点 1.优点 2.缺点 一、异常的引入 传统的C语言处理异常的方式有两种: 1.终止程序:使用as…

[WMCTF2020]Make PHP Great Again 2.01

又是php代码审计,开始吧. 这不用审吧,啊喂. 意思就是我们要利用require_once()函数和传入的file的value去读取flag的内容.,貌似呢require_once()已经被用过一次了,直接读取还不行,看一下下面的知识点. require_once() require…

Qt 注册表操作

一.操作环境 二.注册表查看 1. 搜索注册表打开 2. 注册表查看 例如我想操作 计算机\HKEY_CURRENT_USER\SOFTWARE\winzq\qwert下的内容 三.代码 1. H文件 #ifndef __REGISTER_H__ #define __REGISTER_H__#include <QString> #include <QSettings> #include <Q…

Web 安全(Web Security)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

信息安全工程师(11)网络信息安全科技信息获取

一、信息获取的重要性 在网络安全领域&#xff0c;及时、准确地获取科技信息对于防范和应对网络威胁至关重要。这些信息可以帮助安全团队了解最新的攻击手段、漏洞信息、防护技术等&#xff0c;从而制定有效的安全策略和应对措施。 二、信息获取的来源 网络信息安全科技信息的获…