理解机器学习中的术语
2024-01-07 19:29:48
标量 向量 矩阵 张量
- 标量(scalar),也可以叫做常量,例如 x = 5
- 向量(vector), 它是一个一维数组,例如 x = [1,3,4]
- 矩阵(matrix), 它是一个二维数组,例如
1 2 3
4 5 6
7 8 9
- 张量(tensor)是一个多维数组,张量涵盖向量,矩阵,3D空间(例如正方体), 4维等等
- 标量是张量的最小组成,类似于一个点
- 向量是一个 1阶张量, 是一条线
- 矩阵是一个 2阶张量, 是一个平面
- 依次类推
- 故而张量是机器学习的基础数据存储单位
求导,梯度
- 高等数学中一个函数 y = f ( x ) y = f(x) y=f(x)
- 假设这个函数表示求出速度 , y ( 速度 k m / h ) = 1000 ( m ) x ( 小时 h ) y(速度km/h) = \frac{1000(m)}{x(小时 h)} y(速度km/h)=x(小时h)1000(m)?
- 那么这里的求导就是一个求出加速度 p p p
- p = f ′ ( x ) = ( 1000 x ) ′ = ? 1000 x 2 p = f^{'}(x) = (\frac{1000}{x})^{'} = -\frac{1000}{x^2} p=f′(x)=(x1000?)′=?x21000?
- 这里的求导直接使用了
牛顿莱布尼茨公式
- 而代码的办法是逼近求导
代码实现
- 设 y = f ( x ) y = f(x) y=f(x)
- 根据最基础的求导理解,逼近 p = lim ? n ? > 0 f ( x + n ) ? f ( x ) n p = \lim_{n->0}\frac{f(x+n)-f(x)}{n} p=limn?>0?nf(x+n)?f(x)?
- 那么求导代码如下
def func(x):
return 1000 / x
# 求导数
def get_p(x, batch=5, init=0.1, step=0.1):
for i in range(batch):
result = (func(x + init) - func(x)) / init
init = init * step
print(f"result == {result} batch = {i} init = {init}")
return result
# 根据极限逼近公式计算
print(get_p(1)) # -999.99
# 根据莱布尼茨公式计算
print(-1000 / (1**2)) # -1000
pytorch实现
- 需要创建一个能够记录梯度的张量
- requires_grad 表示需要记录梯度(导数)
- 梯度(gradience), 可以被解释为多维空间中的导数(2D平面空间)
import torch
x = torch.tensor([1], dtype=torch.float, requires_grad=True)
y = 1000 / x
y.backward()
print(x.grad)
文章来源:https://blog.csdn.net/weixin_42290927/article/details/135392762
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!