学了大概一个月时间的pytorch和tensorflow,觉得pytorch写法比tf更简单,也更灵活。不需要通过session来run到结果,数据可以轻松地在cpu和gpu之间切换。
pytorch的一个最重要的机制就是autograd机制,通过这个机制你可以轻易的固定你的模型的部分参数,从而在训练中只是训练你希望训练的那部分计算图。
在pytorch中有两个类型的变量,一个是tensor,另外一个是variable。
tensor就相当于numpy中的ndarray,只是一个多维数组而已,有numpy矩阵的各种操作,也可以与numpy相互转换。
variable相当于一个功能加强版的tensor,其中不仅存放了变量本身的值,还存放了变量的其他属性,例如梯度(grad),是否需要求导(requires_grad)等。从variable所在的package也可以看出,它是在autogard中的类,所以variable是实现autograd的关键。
因此在创建variable时,你可以指定它的参数,requires_grad或者volatile。
requires_grad的特点是只要有一个输入变量是需要求导的,那么它们的输出也是requires_grad的。
例如这个官网的例子
>>> x = Variable(torch.randn(5, 5)) >>> y = Variable(torch.randn(5, 5)) >>> z = Variable