PyTorch基础

1.操作对象——Tensor

a = torch.rand(3,2)
print(a)

tensor([[0.3567, 0.2185],
[0.7125, 0.3519],
[0.3914, 0.2914]])

2.Tensor和Numpy转换

Tensor转Numpy

a = torch.rand(3,2)
b = a.numpy()
print(b)

[[0.35666734 0.21854681]
[0.7125288 0.35190594]
[0.3914237 0.29142433]]

Numpy 转Tensor

c = np.array([[3,2],[5,2]])
d = torch.from_numpy(c)
print(d)

tensor([[3, 2],
[5, 2]], dtype=torch.int32)

3.Variable

pytorch提供了自动求导的功能,也就是可以自动给你你要的参数的梯度,这个操作由另一个基本元素提供,Variable在这里插入图片描述
本质上Variable和Tensor没有区别,不过Variabel会放入一个计算图,然后进行前向传播,反向传播以及自动求导.
一个Variable里面包含着三个属性,data,grad和creator,其中creator表示得到这个Variabel的操作,比如乘法或者加法等等,grad表示方向传播的梯度,data表示取出这个Variabel里面的数据

x = torch.autograd.Variable(torch.Tensor([3]),requires_grad=True)
y = torch.autograd.Variable(torch.Tensor([5]),requires_grad=True)
z = 2*x + y +4
z.backward()
print('dz/dx:{}'.format(x.grad.data))
print('dz/dy:{}'.format(y.grad.data))

dz/dx:tensor([2.])
dz/dy:tensor([1.])

4. torch.max(input, dim)

在分类问题中,通常需要使用max()函数对softmax函数的输出值进行操作,求出预测值索引。下面讲解一下torch.max()函数的输入及输出值都是什么。
输入:
input是softmax函数输出的一个tensor
dim是max函数索引的维度0/1,0是每列的最大值,1是每行的最大值
输出:
函数会返回两个tensor,第一个tensor是每行的最大值,softmax的输出中最大的是1,所以第一个tensor是全1的tensor;第二个tensor是每行最大值的索引。

在计算准确率时第一个tensor values是不需要的,所以我们只需提取第二个tensor,并将tensor格式的数据转换成array格式。

a = torch.tensor([[1,5,62,54], [2,6,2,6], [2,65,2,6]])
print(a)
values,indics = torch.max(a, 1)
print(values,'\n',indics)

tensor([[ 1, 5, 62, 54],
[ 2, 6, 2, 6],
[ 2, 65, 2, 6]])
tensor([62, 6, 65])
tensor([2, 3, 1])

5.神经网络

pytorch里面的模型的建立主要依赖于torch.nn,torch.nn包含这个所有神经网络的层的结构
在这里插入图片描述
这就是构建所有神经网络的模板,不管你想构建卷积神经网络还是循环神经网络或者是生成对抗网络都依赖于这个结构。

6.data

torch里面有专门做图形处理的一个库,torchvision,根据官方安装指南,你在安装pytorch的时候torchvision也会安装。我们需要使用的是torchvision.transforms和torchvision.datasets以及torch.utils.data.DataLoader。

import torch
from torch.utils.data import DataLoader
from torchvision import transforms
from torchvision import datasets

首先DataLoader是导入图片的操作,里面有一些参数,比如batch_size和shuffle等,默认load进去的图片类型是PIL.Image.open的类型,如果你不知道PIL,简单来说就是一种读取图片的库。

torchvision.transforms里面的操作是对导入的图片做处理,比如可以随机取(50, 50)这样的窗框大小,或者随机翻转,或者去中间的(50, 50)的窗框大小部分等等,但是里面必须要用的是transforms.ToTensor(),这可以将PIL的图片类型转换成tensor,这样pytorch才可以对其做处理

torchvision.datasets里面有很多数据类型,里面有官网处理好的数据,比如我们要使用的MNIST数据集,可以通过torchvision.datasets.MNIST()来得到,还有一个常使用的是torchvision.datasets.ImageFolder(),这个可以让我们按文件夹来取图片,和keras里面的flow_from_directory()类似。

train_dataset = datasets.MNIST(
    root='../data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = datasets.MNIST(
    root='../data', train=False, transform=transforms.ToTensor())

train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

参考链接:
https://www.pytorchtutorial.com/10-minute-pytorch-2/
https://www.jianshu.com/p/3ed11362b54f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值