Pytorch训练常用方法总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a940902940902/article/details/85088230

写在前面

该篇博客用来记录深度学习训练过程中的小trick 以及常用的容易犯错的内容 持续更新

训练过程可视化

TensorBoardX 记录训练过程 以及训练过程的分析

Pytorch中自动求导和反向传播

1.生成tensor torch.tensor
由于在pytorch 0.4.0 版本中 tensor 和 Variable 合并 因此不需要在给每个tensor 外部包装一个Variable类型 现在每一个tensor就是一个可以自动求导的Variable 变量
在初始化一个tensor的时候需要注意

a=torch.tensor([[1,2,3],[4,5,6]],dtype=torch.float32,required_grad=True)  # 只有float类型的数据才能够具有导数  
a= torch.Tensor([[1,2,3],[4,5,6]]) 注意tensor 和Tensor 的区别  此时 时不具有dtype 和required_grad属性的

使用 torch.Tensor 是所有其他类型的tensor的基类 其他类型的tensor是torch.Tensor的实例
torch.Tensor 返回的是一个空的tensor
torch.tensor 需要传入data数据
torch.Tensor() 和 torch.tensor(( )) 表示相同的意思

torch.FloatTensor(2,3) 构建一个23 Float类型的张量
torch.DoubleTensor(2,3) 构建一个2
3 Double类型的张量
torch.ByteTensor(2,3) 构建一个23 Byte类型的张量
torch.CharTensor(2,3) 构建一个2
3 Char类型的张量
torch.ShortTensor(2,3) 构建一个23 Short类型的张量
torch.IntTensor(2,3) 构建一个2
3 Int类型的张量
torch.LongTensor(2,3) 构建一个2*3 Long类型的张量
torch.Tensor是默认的tensor类型(torch.FlaotTensor)的简称。

需要修改tensor类型时 torch.type(torch.FloatTensor)
对于需要给tensor增加 梯度的记录时

>>> saved_weights = [0.1, 0.2, 0.3, 0.25]
>>> loaded_weights = torch.tensor(saved_weights)
>>> weights = preprocess(loaded_weights)  # some function
>>> weights
tensor([-0.5503,  0.4926, -2.1158, -0.8303])

>>> # Now, start to record operations done to weights
>>> weights.requires_grad_()
>>> out = weights.pow(2).sum()
>>> out.backward()
>>> weights.grad
tensor([-1.1007,  0.9853, -4.2316, -1.6606])

Pytorch中transpose进行矩阵运算

其实这里transpose和numpy中的transpose是差不多的,在处理高维数据的时候可能会出现混乱的情况 为了避免这一混乱,只需要记住如下两个要点就可以,

1.将数据先分维度再进行填充 例如一个252的三维数组 首先定义好各自的维度 [[],[]] ---->[ [[1,2], [3,4], [5,6], [7,8] ,[9,10] ], [[], [] , [], [], [] ] ],一定要记得最外层括号为第0维
2.做坐标轴的转换其实就相当于原始坐标点转化到转化后的坐标点的过程 例如 np.transpose((0,2,1)) 相当于将高维数组中第一维和第二维进行转换 那么可以看做
nums[0][0][1]的值 经过转化之后变为 nums[0][1][0] 的值 (直接对每一个数据的坐标进行转化 转化完成之后得到的就是坐标轴转化之后的结果)

pytorch中钩子的使用 保存中间变量

猜你喜欢

转载自blog.csdn.net/a940902940902/article/details/85088230
今日推荐