深度学习基础(一)-张量创建,计算与自动微分
深度学习基础(一)-张量创建,计算与自动微分
张量创建
1 | import torch |
张量计算
1 | import torch |
torch.stack()
1 | T1 = torch.tensor([[1, 2, 3], |
torch.meshgrid()
生成网格,可以用于生成坐标。函数输入两个数据类型相同的一维张量,两个输出张量的行数为第一个输入张量的元素个数,列数为第二个输入张量的元素个数,当两个输入张量数据类型不同或维度不是一维时会报错。
其中第一个输出张量填充第一个输入张量中的元素,各行元素相同;第二个输出张量填充第二个输入张量中的元素各列元素相同。
1 | import torch |
自动微分
一个标量对列向量求导的例子
1 | import torch |
非标量求导与分离计算
y.backward(grad_tensors = None, retain_graph = None, create_graph = False, grid_variables = None):
1 | import torch |
pytorch是动态图机制,在训练模型时候,每迭代一次都会构建一个新的计算图.pytorch在利用计算图求导的过程中根节点都是一个标量,即一个数。
当根节点即函数的因变量为一个向量的时候,会构建多个计算图对该向量中的每一个元素分别进行求导。pytoch构建的计算图是动态图,为了节约内存,所以每次一轮迭代完也即是进行了一次backward函数计算之后计算图就被在内存释放,因此如果你需要多次backward只需要在第一次反向传播时候添加一个retain_graph=True
标识,让计算图不被立即释放。
实际上文档中retain_graph
和create_graph
两个参数作用相同,因为前者是保持计算图不释放,而后者是创建计算图,因此如果我们不想要计算图释放掉,将任意一个参数设置为True都行。
1 | import torch |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HUI!
评论
ValineDisqus