神经网路:pytorch中Variable和view参数解析

在PyTorch中计算图的特点总结如下:
autograd根据用户对Variable的操作来构建其计算图。

requires_grad
variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True。
volatile
variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。
retain_graph
多次反向传播(多层监督)时,梯度是累加的。一般来说,单次反向传播后,计算图会free掉,也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存。
.backward()
反向传播,求解Variable的梯度。放在中间缓存中。

在torch里面,view函数相当于numpy的reshape,来看几个例子:

a = torch.arange(1, 17)  # a's shape is (16,)
 
a.view(4, 4)   # output below
tensor([[ 1,  2,  3,  4],
        [ 5,  6,  7,  8],
        [ 9, 10, 11, 12],
        [13, 14, 15, 16]])
[torch.FloatTensor of size 4x4]
 
a.view(2, 2, 4) # output below
tensor([[[ 1,  2,  3,  4],
         [ 5,  6,  7,  8]],
         [[ 9, 10, 11, 12],
         [13, 14, 15, 16]]])
[torch.FloatTensor of size 2x2x4]

在函数的参数中经常可以看到-1例如x.view(-1, 4)

这里-1表示一个不确定的数,就是你如果不确定你想要reshape成几行,但是你很肯定要reshape成4列,那不确定的地方就可以写成-1

例如一个长度的16向量x,

x.view(-1, 4)等价于x.view(4, 4)

x.view(-1, 2)等价于x.view(8,2)

以此类推。

关于x.view(0)的理解

x = x.view(x.size(0), -1)

这句话一般出现在model类的forward函数中,具体位置一般都是在调用分类器之前。分类器是一个简单的nn.Linear()结构,输入输出都是维度为一的值,x = x.view(x.size(0), -1) 这句话的出现就是为了将前面多维度的tensor展平成一维。具体解析如下:

1.在torch的网络定义部分的forward(self,x)中有可能会出现下面这句话:

 x = x.view(x.size(0),-1)

2.这句话的意思是将多维度的Tensor展平成一维,但是到底转换的样子是什么样的其实我们这样看并不明白
代码展示

1.我们先定义一个Tensor:

    import torch
     
    a = torch.arange(1,17)

2.输出这个Tensor的内容和大小:

    print(a)
    print(a.size(0))

代码变为:

    import torch
     
    a = torch.arange(1,17)
     
    print(a)
    print(a.size(0))

结果为:
在这里插入图片描述
将Tensor转换为1维

输入代码:

    b = a.view(a.size(0),-1)
    print(b)

代码变为:

    import torch
     
    a = torch.arange(1,17)
     
    print(a)
    print(a.size(0))
     
    b = a.view(a.size(0),-1)
    print(b)

结果为:
在这里插入图片描述其中这个-1指的是不知道多少列的情况下,根据原来Tensor内容和Tensor的大小自动分配列数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值