深度学习框架PyTorch-- 第二章PyTorch快速入门

"""
Tensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量),一维数组(向量),二维数组(矩阵)以及更高维的数组。
Tensor和Numpy的ndarrays类似,但Tensor可以使用GPU进行加速。Tensor的使用和Numpy及Matlab的接口十分类似,下面通过几个例子来看看Tensor的基本使用.
"""

#torch的版本
from __future__ import print_function
import torch as t
print(t.__version__)

#构建5*3矩阵
x=t.Tensor(5,3)
print(x)
#查看x的形状
print(x.size())

#使用[0,1]均匀分布随机初始化二维数据
x=t.rand(5,3)
print(x)
#查看列的个数,两种写法
print(x.size(1))
print(x.size()[1])

#加法三种写法
y=t.rand(5,3)
res=x+y
print(res)
print(t.add(x,y))
#加法的第三种写法:指定加法结果的输出目标为res
res=t.Tensor(5,3)#余弦分配空间
t.add(x,y,out=res)#输入到res
print(res)


#注意:函数名后面带下划线_的函数会修改Tensor本身。例如,x.add_(y)和x.t_()会改变x,但x.add(y)和x.t()返回一个Tensor,而x不变
print('最初y')
print(y)

print('第一种加法,y的结果')
y.add(x)#普通加法,不改变y的结果
print(y)

print('第二种加法,y的结果')
y.add_(x)
print(y)

#Tensor的选取操作与Numpy类似
print(x[:,1])#取x的第一列,列数从0开始


#新建一个全1的Tensor
a=t.ones(5)
print(a)

#Tensor-->Numpy
b=a.numpy()
print(b)

#Tensor和Numpy对象共享内存,所以他们之间的转换很快,而且几乎不会消耗什么资源。但意味着如果一个变了,另一个也会随着改变。
import numpy as np
a=np.ones(5)
b=t.from_numpy(a) #Numpy-->Tensor
print(a)
print(b)

b.add_(1)#以'_'结尾的函数会修改自身
print(a)
print(b)#Tensor和Numpy共享内存,所以两者都会改变

#如果你想取某一个元素的值,可以使用scalar.item。直接tensor[idx]得到的还是一个tensor:一个0-dim的tensor,一般称为scalar.
scalar=b[0]
print(scalar)
print(scalar.size())#0-dim
print(scalar.item())#使用scalar.item()能从中取出python对象的数值

#注意和scalar的区别
tensor=t.tensor([2])
print(tensor,scalar)
print(tensor.size(),scalar.size())
print(tensor.item(),scalar.item())#只有一个元素的tensor也可以调用'tensor.item()'

#此外在pytorch中还有一个和np.array()很类似的接口:torch.tensor,二者的使用十分类似
tensor=t.tensor([3,4])#新建一个包含3,4两个元素的tensor
scalar=t.tensor(3)

old_tensor=tensor
new_tensor=t.tensor(old_tensor)
new_tensor[0]=1111
print(old_tensor,new_tensor)
#t.tensor()总会进行数据拷贝,新的tensor和原来的数据不再共享内存。所以如果你想共享内存的话,建议使用torch.from_numpy()或者tensor.detach()来新建一个tensor,二者共享内存
new_tensor=old_tensor.detach()
new_tensor[0]=1111
print(old_tensor,new_tensor)



"""
autograd:自动微分
深度学习的算法本质上是通过反向传播求导数,而PyTorch的autograd模块则实现了此功能。
在Tensor上的所有操作,autograd都能为它们自动提供微分,避免了自动计算导数的复杂过程.
要想使用Tensor的autograd功能,只需要设置tensor.requries_grad=True
"""

#为tensor设置requires_grad标识,代表着需要求导数
#p
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值