2022-02-09
从转弯中学习,比较两者的区别:
vs,哪个更适合你
为什么要切换?
更灵活(使用可以找到很多其他人的代码,更容易使用实现自己的想法),支持(也就是说,它基本上可以用作numpy)
更快
代码简洁好用(0.版本4以后没有这个定义,只有一个定义,=True可以自动区分替换)
关于细节的一些发现
1.以下划线结尾的函数是修改自身值的操作。
tensorA.add_(tensorB) # 会改变tensorA的值
2. 和 numpy 易于转换和共享内存。
numpyA = tensorA.numpy() # Tensor -> Numpy tensorA = torch.from_numpy(numpyA) # Numpy -> Tensor
3.如果只有一个元素,可以调用.item()直接获取元素值。
4..() 反向传播后,累加.grad梯度值,使用()将梯度清为0后再使用反向传播。
5.view()有两个作用,一个是改变形状,一个是让新的和原来的共享内存,相当于深拷贝(),而普通的=赋值方式不会共享内存。
6.()是另一种可以用来调整大小的方法,但是和view()不同的是,如果新的维度超过了原来的维度,就会自动分配新的内存空间。
7.添加或删除维度,None类似于np.()
tensor.unsqueeze(n) # 在第n个维度上增加1个维度 tensor.squeeze(n) # 在第n个维度上压缩 tensor.squeeze(1) # 压缩所有维数为1的维度
8.()分配整块内存,有的不占用整块内存,而是由不同的数据块组成,view()操作依赖整块内存。
10.计算完成后,非叶子节点的梯度被清除。可以使用.grad或者hook方法获取非叶子节点的值
常用库
神经网络
torch.nn nn.Module nn.functionalnn.Sequential
原文:
分类:
技术要点:
相关文章:
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容