Pytorch之线性代数

Pytorch之线性代数,第1张

矩阵

Tensor的初始化

矩阵的元素运算是指矩阵在元素级别的加、减、乘、除运算。

(1)元素相加和相减。

条件:矩阵的行数和列数必须相同。

数学公式:

(2)矩阵数乘:一个数乘以一个矩阵。

数学公式:

(3)矩阵所有元素求和。

数学公式:

(4)矩阵所有元素之积

数学公式:

(5)矩阵各元素的n次幂 :n=3。

数学公式:

(1)矩阵各元素的积 :矩阵的点乘同维对应元素的相乘。当矩阵的维度不同时,会根据一定的广播规则将维数扩充到一致的形式。

数学公式:

(2)矩阵内积

数学公式:

(3)向量内积、外积

向量内积:

向量外积:

(4)向量叉乘(叉积) :运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。

数学公式:

其中

根据i、j、k间关系,有:

数学公式:

矩阵的逆

注意:矩阵不满秩,则会报错

矩阵的伪逆

矩阵的秩

矩阵的迹

可逆矩阵的求解

矩阵的特征向量和特征值:

这里 是实对称矩阵, 是特征向量, 是特征值。下面我们使用Pytorch求取矩阵的特征值和特征向量。

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。

2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:

1、具有强大的GPU加速的张量计算(如NumPy);

2、包含自动求导系统的深度神经网络。

优点

1、PyTorch是相当简洁且高效快速的框架;

2、设计追求最少的封装;

3、设计符合人类思维,它让用户尽可能地专注于实现自己的想法;

4、与google的Tensorflow类似,FAIR的支持足以确保PyTorch获得持续的开发更新;

5、PyTorch作者亲自维护的论坛供用户交流和求教问题;

6、入门简单。

扩展资料:

模块

1、Autograd模块

PyTorch使用一种称为自动微分的方法。记录器记录已执行的 *** 作,然后向后重播以计算梯度。当构建神经网络以通过计算前向传递参数的微分来节省一个时间时,此方法特别强大。

2、Optim模块

torchoptim是实现用于构建神经网络的各种优化算法的模块。大多数常用方法已受支持,因此无需从头开始构建它们。

3、nn模块

PyTorchautograd使定义计算图和获取梯度变得容易,但是原始的autograd对于定义复杂的神经网络而言可能太低了。这是nn模块可以提供帮助的地方。

如图搭建简单的分类网络,以二分类为例:

2,10,2分别代表:输入的特征数,隐藏神经元的个数,输出的概率(one-hot编码)

prediction=net(x):概率可以为负数

[06,-01]:表示预测为0,最大概率的索引为0

[-008,65]:表示预测为1,最大概率的索引为1

loss_func=torchnnCrossEntropyLoss()

loss_func中输入的是直接从网络中输出的量(prediction=net(x))

为了查看其预测的标签,通过打印这句话即可:

print(torchmax(Fsoftmax(prediction), 1)[1])

1、Fsoftmax(prediction):将二分类概率都变成0-1之间的数,且相加为1

[03,07]:预测为1

[06,04]:预测为0

2、torchmax(Fsoftmax(prediction), 1):

torchmax(out,1):按行取最大,每行的最大值放到一个矩阵中

torchmax(out,0):按列取最大,每列的最大值放到一个矩阵中

这句话最后返回两个tensor:

values=tensor(最大的概率值)

indices=tensor(最大概率值的索引)

3、torchmax(Fsoftmax(prediction), 1)[1]:

只保留indices的tensor

实例:

注:在有的地方我们会看到torchmax(a, 1)datanumpy()的写法,这是因为在早期的pytorch的版本中,variable变量和tenosr是不一样的数据格式,variable可以进行反向传播,tensor不可以,需要将variable转变成tensor再转变成numpy。现在的版本已经将variable和tenosr合并,所以只用torchmax(a,1)numpy()就可以了。

参考链接:>

这里主要进行分词,词汇表构造以及词汇索引构造

包括 batch_size, embedding_size, 窗口大小和词汇表大小

这里就是将数据包装为torchutilsdataDataset类,并且用DataLoader类来加载数据

假设所有文本分词,转为索引之后的 list 如下图所示

根据论文所述,我这里设定 window size=2,即每个中心词左右各取 2 个词作为背景词,那么对于上面的 list,窗口每次滑动,选定的中心词和背景词如下图所示

那么 skip_grams 变量里存的就是中心词和背景词一一配对后的 list,例如中心词 2,有背景词 0,1,0,1,一一配对以后就会产生 [2,0],[2,1],[2,0],[2,1]。skip_grams 如下图所示

由于 Word2Vec 的输入是 one-hot 表示,所以我们先构建一个单位矩阵,利用 npeye(rows) 方法,其中的参数 rows 表示单位矩阵的行数,对于这个问题来说,语料库中总共有多少个单词,就有多少行。

然后根据 skip_grams 每行第一列的值,取出相应的行。将这些取出的行,append 到一个 list 中去,最终的这个 list 就是所有的样本 X(即one-hot表示)。标签不需要 one-hot 表示,只需要类别值,所以只用把 skip_grams 中每行的第二列取出来存起来即可

最后第三步就是构建 dataset,然后定义 DataLoader

模型架构图:

注意,隐层的激活函数是线性的,相当于没做任何处理。训练这个神经网络,用反向传播算法(本质上是链式求导)

以上就是关于Pytorch之线性代数全部的内容,包括:Pytorch之线性代数、pytorch是什么_pytorch是什么、pytorch 中分类网络损失函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9727168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存