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构建自己设计的层
下面是如何自己构建一个层,分为包含自动反向求导和手动反向求导两种方式,后面会分别构建网络,对比一下结果对不对. -------------------------------------------- ...
随机推荐
- (转)python爬虫:http请求头部(header)详解
本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/r ...
- vue 在全局设置cookie main.js文件
//设置cookie Vue.prototype.setCookie=function(cname, cvalue, exdays) { var d = new Date(); d.setTime(d ...
- sqlite 使用 cte 及 递归的实现示例
1.多级 cte 查询示例. with cte as ( select pageid from cm_bookpage ) , cte2 as ( as content from cte ) sele ...
- bond-vlan-bridge
拓扑介绍 Eth-Trunk5 down down 0% 0% 0 0 10GE1/0/5 down down 0.01% 0.01% 0 0 10GE2/0/5 down down 0.01% 0% ...
- QCAD 修改默认的线宽
QCAD 修改默认的线宽 默认的宽度实在是太宽了,把一些细节给掩盖了. 可以按以下方法找到修改默认宽度. 在 Layer -> Edit Layer 中. 最开始找了好久好久. 最开始在这里找了 ...
- git 与 ftp 共同工作
因git主要用于版本管理,代码同步方面,因临时调试等原因,需要使用ftp上传文件. 但因为git的账户为ubuntu,ftp是虚拟账户overlord 导致文件权限不同,出现的问题主要有: 1.ftp ...
- QPainter绘制遇到的小问题
1.Qt绘图基础 (1)绘图需画笔和画布: QPainter 相当于Qt中的一个画笔,绘制时需要一块画布, Qt中扮演画布角色的组件为QPaintDevice和他的各个子类,如: QWidget, Q ...
- 线程中AutoResetEvent与ManualResetEvent的区别
线程之间的通信是通过发信号来进行沟通的.. ManualResetEvent发送Set信后后,需要手动Reset恢复初始状态.而对于AutoResetEvent来说,当发送完毕Set信号后,会自动Re ...
- excel表格公式无效、不生效的解决方案及常见问题、常用函数
1.表格公式无效.不生效 使用公式时碰到了一个问题,那就是公式明明已经编辑好了,但是在单元格里不生效,直接把公式显示出来了,网上资料说有4种原因,但是我4种都不是,是第5种原因,如下图: 这种情况是由 ...
- vue2.9.5 引入vue-strap时报错
1.vue2.9.5 引入vue-strap时出错 2.组件中引入vue-strap的具体代码如下: 1 import DatePicker from 'vue-strap/src/Datepicke ...