pytorch入门笔记

Pytorch入门笔记

PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序.
PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。除了Facebook外,它已经被Twitter、CMU和Salesforce等机构采用.

张量——数据在神经网络中的表示方式

通过python list和numpy array都可以创建

torch.tensor( [1.,-1],[1.,-1].requires grad = True)

tensor([1.0000, -1.0000], [1.0000, -1.0000])

torch.tensor(np.array([[1,2,3],[4,5,6]])

tensor([1,2,3], [4,5,6])

vector = tensor([2.,3.,4.,5.]
vector[3].item()

通过取值

vector =  tensor([2.,3.,4.,5.])
Data = vector.data
Data = vector,detach()
Data = vector[3].item()

在这里插入图片描述

基本运算(或算子)

torch.add(input, other),或+,如:torch.add(a,b)
类似的减法,乘法,除法
矩阵乘法(常规): torch.mm(input,mat2)

数据加载

Data 抽象类
为方便Loader读取,需要数据包装为Dataset类。自定义的Dataset需要继承它并且实现两个成员方法:

  1. def_len_(self):告诉Loader总共有多少数据
  2. def_getitem_(self,idx):告诉idx把对应的那条数据读出来并转换为tensor。当然,你还可以在变为tensor前对图像做一些预处理

Dataloader
对Dataset进行读取操作,常用参数有:batch_size(每个batch大小)、shuffle(是否进行shuffle操作)、num_workers(加载数据的时候使用几个子进程)

dataloader = torch.utils.data.Dataloader(dataset, batch_size = 10, shuffle = True, num_workers = 0)

图像分类网络的实现

在这里插入图片描述
网络矩阵的运算过程:
[, 900] x [900, 1500] → [, 1500]
[, 1500] x [1500, 100] → [, 100]
[, 100] x [100, 1] → [, 1]

模型优化

import torch.optim

常见:LBFGS, RMSprop,Rprop, SGD, Adamax, Adam
如:optimizer = torch.optim.SGD(net.parameters(), lr=0.01)

更新参数

  1. 清楚梯度(torch会缓存parameter的导数):
    optimizer.zero_grad()
    module.zero_grad()

  2. 求导:

    loss.backward()

  3. 更新参数:
    optimizer.step()

整个训练过程:
加载数据——>构建网络——>构建优化器——>更新参数

Module——模块化的神经网络

讲网络的计算过程封装在一个类中,属于pytorch containers中的一种
在定义网络的时候,需要继承nn.module类,并重新实现构造函数_init_forward()这两个方法

class Linear(nn.Module):
	def _init_(self):
		super(Linear. self)._init_()
		pass
	def forward(self,x):
		pass

在这里插入图片描述

torch.nn.functional

定义更复杂的一些计算过程,但此过程不引入新的参数

torch.nn.functional:
Convolution functions
Pooling functions
Non-linear activation functions
Normalization functions
Linear functions
Dropout functions
Sparse functions
Distance functions
Loss functions
Vision functions
DataParallel functions (multi-GPU, distributed)

神经网络构架

在这里插入图片描述

module堆叠来构建网络

class Linear(nn.Module):
	def _init_(self):
		super(Linear.self)._init_()
		self.fc1 = nn.Linear(900, 1500)
		self.fc2 = nn.Linear(1500, 100)
		self.fc3 = nn.Linear(100,1)
	def forward(self,x):
		out = self.fc1(x)
		out = self.relu(out)
		out = batch_norm(out, runing_mean = 0, running_var = 1)
		...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值