Pytorch_01 Tensor,Autograd,构建网络
Tensor
Tensor是PyTorch中的重要数据结构,可认为是一个高维数组,Tensor与numpy的ndarrays类似,但Tensor可以使用GPU加速
import torch as t#import A as B,给予A库一个B的别称,帮助记忆 #构建5*3矩阵,只是分配了空间,未初始化
x=t.Tensor(5,3)
print(x)
print(x.size())#查看x的形状
print(x.size()[0],x.size(1))#查看列的个数,两种写法等价
print(t.Size([4,5])) #使用[0,1]均匀分布随机初始化二维数组
y=t.rand(5,3)
print(y) #加法的三种写法
print(x+y)
print(t.add(x,y))
#指定加法结果的输出目标未result
result=t.Tensor(5,3)#预先分配空间
t.add(x,y,out=result)#输入到result
print(result)
函数名后面带下划线_的函数会修改Tensor本身。例如,x.add_(y)和x.t_()会改变x,但x.add(y)和x.t()会返回一个新的Tensor,且x不变
Tenor与numpt极为相似,Tensor和numpy的数组见的互操作非常容易且快速,Tensor不支持的操作可先转为numpy数组处理,之后再转回Tensor。
a=t.ones(5)
print(a) b=a.numpy()
print(b) c=np.ones(5)
d=t.from_numpy(c)#Numpy->Tensor
print(c)
print(d)
#Tensor和Numpy共享内存,其中一个改变另一个也会随之改变
d.add_(1)
print(c)
print(d)
Tensor可通过.cuda方法转为GPU的Tensor,从而享受GPU的加速
x=t.rand(3,5)
y=t.ones(3,5) print(t.cuda.is_available()) if t.cuda.is_available():
x=x.cuda()
y=y.cuda()
z=x+y
print(z)
Autograd:自动微分
深度学习的算法本质是通过反向传播求导数,Autograd模块实现了此功能,在Tensor上的所有操作,Autograd都能为他们自动提供微分,避免手动计算导数。
autograd.Variable是Autograd的核心类,它封装了Tensor,并支持几乎所有Tensor的操作。Tensor在被封装为Variable之后,可以调用它的.backward实现反向传播,计算所有梯度。
Variable主要包含三个属性。
data:保存Variable所包含的Tensor。
grad:保存data对应的梯度,grad也是个Variable,而不是Tensor,它和data的形状一样。
grad_fn:指向一个Function对象,这个Function用来反向传播计算输入的梯度。
注意:grad在反向传播过程中是累加的,意味着每次运行反向传播,梯度都回累加之前的梯度,所以反向传播前需把梯度清零。
from torch.autograd import Variable #使用Tensor新建一个Variable x=Variable(t.ones(2,2),requires_grad=True)
print(x) y=x.sum()
print(y)
print(y.grad_fn) y.backward()#反向传播,计算梯度
print(x.grad) y.backward()
print(x.grad) #梯度清零
x.grad.data.zero_()
print(x.grad)
Variable和Tensor有几乎一致的接口,在实际使用中可以无缝切换
x=Variable(t.ones(4,5)) y=t.cos(x)#返回元素的余弦 print(y) x_tensor_cos=t.cos(x.data) print(x_tensor_cos)
pytorch构建神经网络
torch.nn是专门为神经网络设计的模块化接口。nn构建于Autograd之上,可用来定义和运行神经网络。nn.Module是nn中最重要的类,包含网络各层定义及forward方法,调用forward(input)方法,可返回前向传播的结果。
1.定义网络:
定义网络时,需要继承nn.Module,并实现它的forward方法,把网络中具有可学习参数的层放在构造函数__init__()中。如果某一层不具有可学习参数,则既可以放在构造函数中,也可不放。
import torch.nn as nn
import torch.nn.functional as F class Net(nn.Module):
def __init__(self):
# nn.Module子类的函数必须在构造函数中执行父类的构造函数
# 下式等价于nn.Module.__init__(self)
super().__init__()
# 卷积层'1'表示输入图片为单通道,'6'表示输出通道数
# '5'表示卷积核为5*5
#卷积核为2维
self.conv1 = nn.Conv2d(1, 6, 5) self.conv2 = nn.Conv2d(6, 16, 5)
# 仿射层/全连接层,y=Wx+b
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10) def forward(self, x):
#卷积->激活->池化
x=F.max_pool2d(F.relu(self.conv1(x)),(2,2))
x=F.max_pool2d(F.relu(self.conv1(x)),2)
#reshpe,'-1'表示自适应
x=x.view(x.size()[0],-1)
x=F.relu(self.fc1(x))
x=F.relu(self.fc2(x))
x=self.fc3
return x net=Net()
print(net)
只要在nn.module的子类中定义了forward函数,backward函数就会被自动实现(利用Autograd)。在forward函数中可使用任何Variable支持的函数,还可以使用if、for循环、print、log等Python语法
网络的可学习参数通过net.parameters()返回,net.named_parameters可同时返回可学习的参数及名称。
1.
Pytorch_01 Tensor,Autograd,构建网络的更多相关文章
- Docker 构建网络服务后本机不能访问
Docker 构建网络服务后本机不能访问 起因 使用tornado构建了一个服务,测试都没有问题 使用docker构建镜像,使用docker run image_name启动服务 使用浏览器访问 12 ...
- L0 torch 构建网络初步
L0 pytorch 构建简单网络 本文是L0, 目的是把pytorch构建感知器的程序,仔细剖析理解. import torch from torch import nn torch.__versi ...
- 利用sfc文件构建网络渗透
收集哈希 SCF(Shell命令文件)文件可用于执行一组有限的操作,例如显示Windows桌面或打开Windows资源管理器,这并不是什么新鲜事.然而,一个SCF文件可以用来访问一个特定的UNC路 ...
- keras 学习笔记:从头开始构建网络处理 mnist
全文参考 < 基于 python 的深度学习实战> import numpy as np from keras.datasets import mnist from keras.model ...
- WGCNA构建基因共表达网络详细教程
这篇文章更多的是对于混乱的中文资源的梳理,并补充了一些没有提到的重要参数,希望大家不会踩坑. 1. 简介 1.1 背景 WGCNA(weighted gene co-expression networ ...
- 数据挖掘入门系列教程(十二)之使用keras构建CNN网络识别CIFAR10
简介 在上一篇博客:数据挖掘入门系列教程(十一点五)之CNN网络介绍中,介绍了CNN的工作原理和工作流程,在这一篇博客,将具体的使用代码来说明如何使用keras构建一个CNN网络来对CIFAR-10数 ...
- PyTorch全连接ReLU网络
PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网 ...
- 第二十一节,使用TensorFlow实现LSTM和GRU网络
本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...
- pytorch构建自己设计的层
下面是如何自己构建一个层,分为包含自动反向求导和手动反向求导两种方式,后面会分别构建网络,对比一下结果对不对. -------------------------------------------- ...
随机推荐
- next()方法 执行下一个中间件 类似than
next()方法出现在express框架中的中间件部分,由于node异步的原因,我们需要提供一种机制,当当前中间件工作完成之后,通知下一个中间件执行,因此一个基本的中间件应该是这种形式 var mid ...
- 使用samba共享文件夹,提供给window访问
1. 下载yumdownloader yum install -y yum-utils 2. 下载samba mkdir samba cd samba yumdownloader --resolve ...
- 个人练习:使用HTML+CSS3制作图片轮播功能(不使用JavaScript)
先上效果图,不要在意用来当素材的图片: 在搜索相关资料的时候,查到有两种实现方式:一是使用JavaScript,二是使用CSS3中的Animation(动画),这里使用的是CSS3中的Animatio ...
- zabbix免客户端监控网站URL
1.我们需要在zabbix服务器端(这台服务器需要能正常上网)同时安装zabbix-agent客户端,使其正常监控zabbix服务器 2.创建web监测 点击web监测 创建web监测 3.配置异常报 ...
- Python(四) —— 函数
什么是函数? 把一堆代码放一起就叫函数 函数用来干什么? 不复写代码,提高代码重复利用程度 怎么定义以及调用函数: def fun1(): #定义函数 print('这是一个函数') #函数体,里面什 ...
- jQuery汇总
closest() 方法返回被选元素的第一个祖先元素. $("span").closest("ul")返回 <span> 的第一个祖先元素,是一个 ...
- C# 控件消失等问题
控件消失原因: 1.新控件的触发导致页面重载,该重载有没有达到原有控件的触发状态进而消失. 2.(目前只发现这一点,后续又发现再更...) 1.示例: ASPX: <div> <!- ...
- angular2在模板中使用属性引发Cannot read property 'xxx' of undefined
angular在模板中使用属性引发Cannot read property 'xxx' of undefined 在使用ng2的过程中,发现模板中如下方式 <li *ngFor="le ...
- javascript连连看
经测试,IE,Firefox,Chrome,Opera可用. 连接线最多2个拐角.秘籍为:开始后连续输入zycjwdss 还剩0对 对数字 高度: 宽度: // 0)return 1;//IE i ...
- 【springboot】之自动配置原理
使用springboot开发web应用是很方便,只需要引入相对应的GAV就可以使用对应的功能,springboot默认会帮我们配置好一些常用配置.那么springboot是怎么做到的呢?这篇文章将一步 ...