PyTorch 学习笔记(二):张量、变量、数据集的读取、模组、优化、模型的保存和加载

一. 张量

PyTorch里面最基本的操作对象就是Tensor,Tensor是张量的英文,表示的是一个多维的矩阵,比如零维就是一个点,一维就是向量,二维就是一般的矩阵,多维就相当于一个多维的数组,这和numpy是对应的,而且PyTorch的Tensor和numpy的ndarray可以相互转换,唯一不同的是PyTorch可以在GPU上运行,而numpy的ndarray只能在CPU上运行。

我们先介绍一下一些常用的不同数据类型的Tensor,有32位浮点型torch.FloatTensor,64位浮点型torch.DoubleTensor,16位整型torch.ShortTensor,32位整型torch.IntTensor和64位整型torch.LongTensor。

1 定义一个给定尺寸给定元素的张量

需要注意的是torch.Tensor默认的是torch.FloatTensor的数据类型

# 定义一个三行二列给定元素的矩阵,并且显示出矩阵的元素和大小
a = torch.Tensor([[2, 3], [4, 8], [7, 9]])
print('a is: {}'.format(a))
print("a'size is {}".format(a.size()))

运行结果:
在这里插入图片描述

也可以定义自己想要的数据类型:

# 定义一个三行二列给定元素的矩阵,并且显示出矩阵的元素和大小
b = torch.LongTensor([[2, 3], [4, 8], [7, 9]])
print('a is: {}'.format(a))

当然也可以创建一个全0、全1的Tensor或者取一个正态分布作为随机初始值:

# 全零张量
c = torch.zeros((3, 2))
print('zero tensor: {}'.format(c))
# 全一张量
d = torch.ones((3, 2))
print('one tensor: {}'.format(d))
# 随机初始化
e = torch.randn((3, 2))
print('normal randon is: {}'.format(e))

运行结果:
在这里插入图片描述

2 通过索引获取或者改变张量中的值

我们也可以像numpy一样通过索引的方式取得其中的元素,同时也可以改变他的值。

# 将张量a中第一行第二列的元素变为100
a[0, 1] = 100
print('changed a is: {}'.format(a))

运行结果:
在这里插入图片描述

3 Tensor与numpy.ndarray之间相互转换

# 将Tensor b转换为ndarray类型
numpy_b = b.numpy()
print('conver to numpy is \n {}'.format(numpy_b))

# 定义一个ndarray类型的 e
e = np.array([[2, 3], [4, 5]])
# 将e由ndarray类型转换为Tensor类型
torch_e = torch.from_numpy(e)
print('from numpy to torch.Tensor is {}'.format(torch_e))
# 更改tensor的数据类型——由int32到float
f_torch_e = torch_e.float()
print('change data type to float tensor: {}'.format(f_torch_e))

运行结果:
在这里插入图片描述
如果你的电脑支持GPU加速,还可以将Tensor放到GPU上。
首先通过torch.cuda.is_available()判断一下是否支持GPU,如果想把tensor a放到GPU上,只需 a.cuda()就能够将tensor a放到GPU上了。

if torch.cuda.is_available():
    a_cuda = a.cuda()
    print(a_cuda)

二. 变量

接着要讲的概念就是Variable,也就是变量,这个在numpy里面是没有的,是神经网络计算图里特有的一个概念,就是Variable提供了自动求导的功能,之前如果了解过Tensorflow的人应该清楚神经网络在做运算的时候需要先构造一个计算图谱,然后在里面进行前向传播和反向传播。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值