CUDA语义 - PyTorch中文文档https://pytorch-cn.readthedocs.io/zh/latest/notes/cuda/

这个网站封面长这样,上面就是“花书”的网页版,里面有pytorch、tensorflow等三种流行框架的实现代码,比较适合入门(我也是刚入门,菜鸟写博客,有错欢迎指正,一起学习共同进步)

推荐:pytorch中文文档

 主页 - PyTorch中文文档Nonehttps://pytorch-cn.readthedocs.io/zh/latest/朋友推荐的,目前我也只是用过一两次,大家也可以试下

写这个博客当然不是因为上面想介绍的原因,主要是因为看到里面的一部分代码不懂原理,仔细查阅之后总结一下,下面进入正题

今天主要遇到的问题是关于 花书 3.2.1中的生成数据集的pytorch代码

def synthetic_data(w, b, num_examples):  #@save
    """生成 y = Xw + b + 噪声。"""
    X = torch.normal(0, 1, (num_examples, len(w)))
    y = torch.matmul(X, w) + b
    y += torch.normal(0, 0.01, y.shape)
    return X, y.reshape((-1, 1))

true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)

跟着学习的时候发现 torch.matmul() 这个函数一直很迷糊的功能和原理,因为图中的参数 X 是 [1000,2]的张量,而参数 w 是一个一维的向量, 这个和我之前学过的矩阵运算不一样,所以有点迷糊,特别去查了一下关于 torch.matmul()的用法

 查询方法是在  jupyter的notebooks中输入 help(torch.matmul) 则会出现如下说明

翻译下来大概意思就是如下:

matmul(参数1/张量1,参数2/张量2,*,输出=无)->张量

两个张量的矩阵积。

行为取决于张量的维数,如下所示:

-如果两个张量都是一维的,则返回点积(标量)。

-如果两个参数都是二维的,则返回矩阵积。

-如果第一个参数是一维的,第二个参数是二维的,为了矩阵乘法,在其维数前加上1。矩阵相乘后,将删除带前缀的维度。

-如果第一个参数是二维的,第二个参数是一维的,返回矩阵向量积。

-如果两个参数都至少是一维的,并且至少有一个参数是一维的N维(其中N>2),则返回一个批处理矩阵乘法。如果第一个参数是一维的,为便于批量矩阵乘法并在之后移除。如果第二个参数是一维的,则为了批量矩阵的目的,将1添加到其维度,并在之后删除。

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐