Pytorch使用(一)

在jupyter notebook/jupyterlab中怎么操作宿主机

当在jupyter中需要操作宿主机时,可以通过将命令前加上!或者%即可。

#查看当前目录
%pwd
!pwd
#查看当前目录下有什么内容
!ls
%ls
#通过jupyter安装相关包

创建张量

创建张量的方法是由从什么来创建所决定的。
如果从列表来创建,那么就用torch.tensor()方法。
如果从概率分布中创建就用torch.randn()等方法来生成。
通过创建函数赋值创建张量就是在新位置(id)处生成一个数据。
tensor.data提取出来的是张量的数据地址,当把它赋值给别的变量时,相当于把同一个地址赋值给这个新位置处的变量。当这个位置的变量的数值发生变化时,原位置处的变量的数值也会发生变化。而tensor.detach()提取出来的是数据的复制品,当把它赋值给别的变量时,不存在位置上的依赖。
要想保持原位置更新张量的数值,那么就需要使用冒号或者是简略运算符,例如+=,-=,*=,/=等等,这就跟节省内存对应上了。

#绝缘的操作,具有不同id,无论采取什么方法更改数据区都不会影响另一个的数据。哪怕是采用不绝缘的操作来更改数据区也不会影响另一个的数据。
tensora=tensorb.data
tensora=torch.tensor(tensorb)
tensora=tensorb.clone()
tensora=tensorb.detach()
#不绝缘的操作,具有同一个id,当采用特定的原地修改方法时会影响另一个数据。
tensora=tensorb
tensora.data=tensorc	#采用这种方法可以实现原地修改数据区,这样在不绝缘的情况下会影响tensorb这个数据。
tensora=tensorc			#采用这种方法不能原地修改数据区也就不能影响tensorb这个数据。

Pytorch中的tensor张量属性

利用pytorch进行深度学习或人工智能开发,不可避免要用到Tensor张量,所以有必要弄清楚张量的所有属性和用法。

#注意方法要加括号,属性不用加括号
#通过clone方法来创建张量
tensora=tensorb.clone()
##这样两个张量的id是不一样的。所对应的data属性区也是不一样的,更改tensora的data不会影响tensorb的数据。更改tensorb的data属性也不会影响tensora的数据。双向绝缘。
#通过detach方法来创建张量
tensora=tensorb.detach()
##这两个张量的id是不一样的。数据区data也是不一样的,双向绝缘。
#通过torch.tensor方法来创建张量
tensora=torch.tensor(tensorb)
##这两个张量的id也是不一样的。数据区也是绝缘的,

原张量数据区变化:
原张量
clone张量数据区变化:
clone张量
detach张量的数据区变化:
detach张量
所以就算原张量是一个可变张量,detach以后就是一个常量了,clone以后也是一个常量了。原张量的变化不会对detach,clone后产生的张量发生影响。

autograd包中的Variable变量属性

提到张量不得不提跟他很相似的变量,variable,在PyTorch中,Variable是一个重要的概念,它是对tensor的封装,可以用于自动求导和梯度下降算法等。

#Variable变量的创建
tensora=Variable(tensorb)
#随后对这个变量tensora进行clone和detach方法,发现关系依旧如上所示,双向绝缘。注意此处使用的是.data属性更改tensora的内容。同时保持了tensora的前后id一致。见下图第一个
#同时tensora和创建时备用来做参数的tensorb之间也是绝缘的。
#当采用赋值直接修改的时候会变化这个变量的id。

通过.data属性修改变量内容
属性修改
同样不会改变数据类型
数据类型
所以通过.data可以实现原地修改。而其他的会改变数据位置
直接修改变量内容
直接修改
当然还需要验证一下直接赋值会不会改变变量类型。不过貌似是没有什么变化。
直接赋值类型

什么时候数据不是绝缘的?

通过上述分析可以发现,通过创建函数来创建的张量或者变量的数据区都是绝缘的。id都不一样,比如torch.tensor创建的,variable创建的,clone(),detach()等等。
唯一不绝缘的就是通过直接变量名赋值的,比如:tensora=tensorb,这样两个变量的id是一样的。修改任意一个变量的数据区并保持id不变也就是原地修改,那么另一个变量的数据区也会发生变化。如果不原地修改,那么会导致绝缘。
绝缘的情况:
绝缘
不绝缘的情况:
不绝缘
可以粗略的认为除了这种情况,其他的都是绝缘的。

张量运算

张量操作分为同形状按元素运算和不同形状用广播运算。除了形状不一致采用广播运算,其他的都是按元素运算。
参考:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值