Pytorch碎片篇

2020/08/08 Methods 共 1500 字,约 5 分钟

Pytorch碎片篇:

本文将主要整理博主遇到的一些有关pytorch的未能分类的内容,没有顺序。

1. 函数名是否带下划线

PyTorch中,一般函数加下划线代表直接在原来的 Tensor 上重写该值,即in-place操作,可以参考下面代码来理解:

import torch
x = torch.arange(-4,-1)
y = x.abs()
print(x)
y = x.abs_() # 个人理解:x.abs_()等效于x=x.abs()
print(x)

======== output ==========
tensor([-4, -3, -2])
tensor([4, 3, 2])

2. 自动求导的一些疑问记录:

https://blog.csdn.net/jiongjiongxia123/article/details/105135241,一篇关于pytorch求导的博文

pytorch.dot(X,Y)内积操作对U求导,结果为$X^T\frac{\partial X}{\partial U}+Y^T\frac{\partial Y}{\partial U}$

网络固定参数时要将某些计算移动到记录的计算图之外 :

# x为tensor,已经定义梯度了
y = x * x
u = y.detach()
z = u * x # 此处的u和x已经没有关系了,而是变成了一个常数,但是y是没有变得,仍然是有关x的函数
z.sum().backward()
x.grad == u

为啥深度学习中一般都是对标量求导而不是对矩阵或者向量?答:loss通常是标量,如果是向量,对矩阵求导变成矩阵,再对矩阵求导4维矩阵,因此当网络层数过深的时候就很麻烦。

3. Iterable:

这一部分严格来说属于python的知识,不过顺便在这里整理出来,iterable为可迭代的意思,像是lpython中的ist、str、tuple、dict、set等都是iterable类型。

object_iter = iter(object) #生成iterable
next(iterable[, default]) # next经常与iter搭配使用,来获取下一个对象,当不存在时会抛出StopIteration,退出循环,可定义default,从而下次返回该值退出循环,并不会抛出StopIteration

# 判断某一变量是否为iterable
from collections import Iterable
if isinstance(object_iter,Iterable):

4. Pytorch输入:

2D: N×C×H×W

NCHW
batch_sizechannel_numheightwidth

3D: N×C×D×H×W

NCDHW
batch_sizechannel_numdepthheightwidth

channel和depth的区别:channel表示同一张图片的不同颜色空间,depth表示不同图片

5. Torchsummary:

输入网络模型,以及输入,就可以的得到网络结构、参数量,模型大小,torchsnooper???

from torchsummary import summary
summary(model, (3, 224, 224)) # 这里输入一般就是一个数据,没有batch_size 

6. Assert:

用于不确定一些条件时,调整用

a = -2
assert a > 0, "a超出范围" # a>0属于我们要求的条件,后面“”中的内容会在不满足这个条件时报告,AssertionError: a超出范围

7. f’ ‘和format格式化输出:

print(f'{变量名}') # 任意变量,字典内容也可以
print('{输出}'.format(输出=变量名))

文档信息

Search

    Table of Contents