[pytorch] Pytorch入门
Pytorch入门
简单容易上手,感觉比keras好理解多了,和mxnet很像(似乎mxnet有点借鉴pytorch),记一记。
直接从例子开始学,基础知识咱已经看了很多论文了。。。
import torch
import torch.nn as nn
import torch.nn.functional as F
# Linear 层 就是全连接层
class Net(nn.Module): # 继承nn.Module,只用定义forward,反向传播会自动生成
def __init__(self): # 初始化方法,这里的初始化是为了forward函数可以直接调过来
super(Net,self).__init__() # 调用父类初始化方法
# (input_channel,output_channel,kernel_size)
self.conv1 = nn.Conv2d(1,6,5) # 第一层卷积
self.conv2 = nn.Conv2d(6,16,5)# 第二层卷积
self.fc1 = nn.Linear(16*5*5,120) # 这里16*5*5是前向算的
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)) # 卷积一次激活一次然后2*2池化一次
x = F.max_pool2d(F.relu(self.conv2(x)),2) # (2,2)与直接写 2 等价
x = x.view(-1,self.num_flatten_features(x)) # 将x展开成向量
x = F.relu(self.fc1(x)) # 全连接 + 激活
x = F.relu(self.fc2(x)) # 全连接+ 激活
x = self.fc3(x) # 最后再全连接
return x
def num_flatten_features(self,x):
size = x.size()[1:] # 除了batch_size以外的维度,(batch_size,channel,h,w)
num_features = 1
for s in size:
num_features*=s
return num_features
# ok,模型定义完毕。
net = Net()
print(net)
'''
Net(
(conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))
(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))
(fc1): Linear(in_features=400, out_features=120, bias=True)
(fc2): Linear(in_features=120, out_features=84, bias=True)
(fc3): Linear(in_features=84, out_features=10, bias=True)
)
'''
params = list(net.parameters())
print(len(params))
print(params[0].size())
'''
10
torch.Size([6, 1, 5, 5])
'''
inpt = torch.randn(1,1,32,32)
out = net(inpt)
print(out)
'''
tensor([[-0.0265, -0.1246, -0.0796, 0.1028, -0.0595, 0.0383, 0.0038, -0.0019,
0.1181, 0.1373]], grad_fn=<AddmmBackward>)
'''
target = torch.randn(10)
criterion = nn.MSELoss()
loss = criterion(out,target)
print(loss)
'''
tensor(0.5742, grad_fn=<MseLossBackward>)
'''
net.zero_grad()# 梯度归零
print(net.conv1.bias.grad)
loss.backward()
print(net.conv1.bias.grad)
'''
None
tensor([-0.0039, 0.0052, 0.0034, -0.0002, 0.0018, 0.0096])
'''
import torch.optim as optim
optimizer = optim.SGD(net.parameters(),lr = 0.01)
optimizer.zero_grad()
output = net(inpt)
loss = criterion(output,target)
loss.backward()
optimizer.step()
# 一个step完成,多个step就写在循环里
pytorch简直太好理解了。。继续蓄力!!
[pytorch] Pytorch入门的更多相关文章
- 《深度学习框架PyTorch:入门与实践》的Loss函数构建代码运行问题
在学习陈云的教程<深度学习框架PyTorch:入门与实践>的损失函数构建时代码如下: 可我运行如下代码: output = net(input) target = Variable(t.a ...
- 《深度学习框架PyTorch:入门与实践》读书笔记
https://github.com/chenyuntc/pytorch-book Chapter2 :PyTorch快速入门 + Chapter3: Tensor和Autograd + Chapte ...
- pytorch怎么入门学习
pytorch怎么入门学习 https://www.zhihu.com/question/55720139
- pytorch从入门到放弃(目录)
目录 前置基础 Pytorch从入门到放弃 推荐阅读 前置基础 Python从入门到放弃(目录) 人工智能(目录) Pytorch从入门到放弃 01_pytorch和tensorflow的区别 02_ ...
- 【笔记】PyTorch快速入门:基础部分合集
PyTorch快速入门 Tensors Tensors贯穿PyTorch始终 和多维数组很相似,一个特点是可以硬件加速 Tensors的初始化 有很多方式 直接给值 data = [[1,2],[3, ...
- 图神经网络 PyTorch Geometric 入门教程
简介 Graph Neural Networks 简称 GNN,称为图神经网络,是深度学习中近年来一个比较受关注的领域.近年来 GNN 在学术界受到的关注越来越多,与之相关的论文数量呈上升趋势,GNN ...
- Pytorch快速入门及在线体验
本文搭配了Pytorch在线环境,可以直接在线体验. Pytorch是Facebook 的 AI 研究团队发布了一个基于 Python的科学计算包,旨在服务两类场合: 1.替代numpy发挥GPU潜能 ...
- PyTorch快速入门教程七(RNN做自然语言处理)
以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方 ...
- pytorch 从入门到实战
一.安装 按照 http://pytorch.org 官网上的说明来做,遇到了几个坑.记录如下: 1.用 conda 安装 pytorch 时,下载安装包非常慢,无法忍受. 解决办法:用蓝灯FQ,将蓝 ...
随机推荐
- Java学习笔记day06_自定义类_ArrayList
1.自定义类class 使用类的形式, 对现实中的事物进行描述. 类是引用数据类型. 事物: 方法,变量. 方法:事物具备的功能. 变量:事物的属性. 格式: public class 类名{ //属 ...
- Web前端常见问题
一.理论知识 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器 ...
- C实现shell管理的一个例子
通常情况下,一个进程(比如cat /tmp/tt.txt)的输出与输入是标准输入(stdin或者0).标准输出(stdout或者1) shell 获取tt.txt文件中包含aa的行记录,涉及两个进程, ...
- spring配置文件中util:properties和context:property-placeholder
util:properties和context:property-placeholder标签都可以用来获取外部配置文件中的内容 1.util:properties 它是以声明bean方式来使用,创建了 ...
- 电感的Q值
电感的Q值又称为品质因数,即在通过一定频率信号时,感抗与等效损耗之比.品质因数越高即系统损耗越小效率越高,一般为50`100,最高500左右,再大就会烧毁.一般Q值与很多因素有关:绕线粗细,长度与直径 ...
- python的面向对象的特性(继承、封装、多态)
创建自已对象就python非常核心的概念,事实上,python被称为面向对象语言,本章会介绍如何创建对象.以及面向对象的概念:继承.封装.多态. 多态: 可对不同类的对象使用同样的操作. 封装:对外部 ...
- stm32 窗口看门狗学习(一)
什么是窗口看门狗? 1)独立看门狗 限制喂狗时间在0-x内,x由相关寄存器决定.喂狗的时间不能过晚. 2)窗口看门狗 之所以称为窗口就是因为其 ...
- pat05-图2. Saving James Bond - Easy Version (25)
05-图2. Saving James Bond - Easy Version (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作 ...
- Linux 安装 webmin
下载webmin的rpm包 yum install webmin-rpm systemctl start webmin 即可
- DataGridView进度条列 C# WinForm
先看看效果,如果感兴趣,继续往下看…… 效果如下图所示: DataGridView里没有Pragress列,但有Image列,有了它我们可以自己绘图来实现进度条.其实实现起来并不困难. 首先在实体类增 ...