C/C++教程

BERT书籍阅读笔记(二)PyTorch编程基础(1)

本文主要是介绍BERT书籍阅读笔记(二)PyTorch编程基础(1),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 向量乘法
    • 张量间的操作
    • 控制模型每次训练的结果相同
    • 定义一个模型的基本步骤
    • 获取模型信息

向量乘法

(1)阿达玛积(Hadamard Product)
  定义为两个矩阵对应位置的元素进行相乘。

c = a * b

(2)点积(Dot Product)
  矩阵相乘,第一个矩阵的列数必须等于第二个矩阵的行数。

c = a @ b
c = np.dot(a, b)
c = torch.matmul(a,b)

张量间的操作

(1)张量与Numpy相互转换的陷阱
  在将Numpy转化为张量时,只是简单的将指针赋值,并不会发生复制现象,因此二者共享一块内存。
  PyTorch考虑了这一点,在Numpy转化为张量后,如果对张量进行修改,则其内部会触发复制机制,额外开辟一块内存,不会影响原来Numpy的值。
  但是对Numpy进行修改的话,会同时改变对应张量的值。
(2)修改张量的维度

a.reshape()
a.view()

  二者都要求指定的目标形状必须与原有的输入张量的元素个数一致,在指定形状的过程中可以用-1来代表该维度由系统自动运算。
  但是view要求存储连续,因此一般与contiguous()方法连用
(3)增减张量的维度

torch.squeeze() #去除值为1的维度
torch.unsqueeze()#增加一个值为1的维度
torch.cat()#张量拼接

(4)交换张量维度的值

torch.permute(1,0) #将维度0和维度1交换

控制模型每次训练的结果相同

torch.manual_seed(0)
torch.cuda.manuak_seed_all(0)
np.random.seed(0)#设计随机数种子

定义一个模型的基本步骤

  (1)定义模型类,使其继承于Module类。
  (2)在模型类的初始化接口中定义网络层
  (3)在模型类的正向数据流处理接口中,将网络层连接起来(需要时添加激活函数),搭建出网络结构。

获取模型信息

#获得各层信息及名字
model.children()
model.named_children()#获得各层信息及名字
model.modules()#获取整个网络的结构信息
model.parameters()
model.named_parameters()#获取模型中的参数
model.state_dict()#获取模型的全部参数
这篇关于BERT书籍阅读笔记(二)PyTorch编程基础(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!