tensor:

import torch
data = [[1,2], [3,4]]
tensor = torch.FloatTensor(data)

各种操作和numpy.array类似

Variable:
from torch.autograd import Variable
变量,里面的主要元素就是tensor(type(Variable.data) == A_KIND_OF_TENSORS),但是一个variable是会记住自己是被哪些Variable计算出来的(variable = Variable(tensor, requires_grad=True)),所以当我们计算出最后一个Variable:loss时,就可以通过loss.backward(),来对梯度进行反向传播。然后loss.grad就是其对应的梯度,loss计算图中的各个Variable中的grad成员也会自动变成其对应的参数,记得每次计算新的grad时,要把原来的梯度清0。(optimizer.zero_grad()可以自动完成这个操作,把所有Variable的grad成员数值变为0,然后optimizer.step()则在每个Variable的grad都被计算出来后,更新每个Variable的数值)

激励函数:
import torch.nn.functional as F
F里面存着各种激励函数,进去一个Variable,出来一个Variable,最常用的当然就是F.relu(A_VARIABLE)

optimizer:

optimizer = torch.optim.SGD(net.parameters(), lr=0.5)

qusetion:net.parameters()是哪里来的,作用是什么?
optimizer.zero_grad()可以把所有Variable的grad成员数值变为0
optimizer.step()则可以用所有Variable的grad成员和lr的数值自动更新Variable的数值。
给Variable打上粗体是因为之中Variable会被optimizer的相关函数更新,如果你把东西放在list或其它东西里,它们的梯度是不会被更新的!

loss function:
loss_func = torch.nn.MSELoss()建立一个神经网络

class Net(torch.nn.Module):  # 继承 torch 的 Moduledef __init__(self, n_feature, n_hidden, n_output):super(Net, self).__init__()     # 继承 __init__ 功能# 定义每层用什么样的形式self.hidden = torch.nn.Linear(n_feature, n_hidden)   # 隐藏层线性输出self.predict = torch.nn.Linear(n_hidden, n_output)   # 输出层线性输出def forward(self, x):   # 这同时也是 Module 中的 forward 功能# 正向传播输入值, 神经网络分析出输出值x = F.relu(self.hidden(x))      # 激励函数(隐藏层的线性值)x = self.predict(x)             # 输出值return xnet = Net(n_feature=1, n_hidden=10, n_output=1)print(net)  # net 的结构"""
Net ((hidden): Linear (1 -> 10)(predict): Linear (10 -> 1)
)
"""

训练一个网络:
# optimizer 是训练的工具optimizer = torch.optim.SGD(net.parameters(), lr=0.5)  # 传入 net 的所有参数, 学习率loss_func = torch.nn.MSELoss()      # 预测值和真实值的误差计算公式 (均方差)

for t in range(100):prediction = net(x)     # 喂给 net 训练数据 x, 输出预测值loss = loss_func(prediction, y)     # 计算两者的误差optimizer.zero_grad()   # 清空上一步的残余更新参数值loss.backward()         # 误差反向传播, 计算参数更新值optimizer.step()        # 将参数更新值施加到 net 的 parameters 上

快速搭建网络:
之前写的搭建方法适用于你可以对网络进行各种各样的自定义
接下来的方法,如果不需要什么复杂的过程的话,只需要按下面的过程来构建就好了。

net2 = torch.nn.Sequential(torch.nn.Linear(1, 10),torch.nn.ReLU(),torch.nn.Linear(10, 1)
)

保存网络:

torch.save(net1, 'net.pkl') # 保存整个网络
torch.save(net1.state_dict(), 'net_params.pkl') # 只保存网络中的参数 (速度快, 占内存少)

提取网络
提取整个神经网络, 网络大的时候可能会比较慢.

def restore_net():# restore entire net1 to net2net2 = torch.load('net.pkl')prediction = net2(x)

只提取网络参数

def restore_params():# 新建 net3net3 = torch.nn.Sequential(torch.nn.Linear(1, 10),torch.nn.ReLU(),torch.nn.Linear(10, 1))

# 将保存的参数复制到 net3

  net3.load_state_dict(torch.load('net_params.pkl'))prediction = net3(x)

批处理:

# 把 dataset 放入 DataLoaderloader = Data.DataLoader(dataset=torch_dataset,      # torch TensorDataset formatbatch_size=BATCH_SIZE,      # mini batch sizeshuffle=True,               # 要不要打乱数据 (打乱比较好)num_workers=2, )             # 多线程来读数据)for epoch in range(3):   # 训练所有!整套!数据 3 次for step, (batch_x, batch_y) in enumerate(loader):  # 每一步 loader 释放一小批数据用来学习# 假设这里就是你训练的地方...# 打出来一些数据print('Epoch: ', epoch, '| Step: ', step, '| batch x: ',batch_x.numpy(), '| batch y: ', batch_y.numpy())"""
Epoch:  0 | Step:  0 | batch x:  [ 6.  7.  2.  3.  1.] | batch y:  [  5.   4.   9.   8.  10.]
Epoch:  0 | Step:  1 | batch x:  [  9.  10.   4.   8.   5.] | batch y:  [ 2.  1.  7.  3.  6.]
Epoch:  1 | Step:  0 | batch x:  [  3.   4.   2.   9.  10.] | batch y:  [ 8.  7.  9.  2.  1.]
Epoch:  1 | Step:  1 | batch x:  [ 1.  7.  8.  5.  6.] | batch y:  [ 10.   4.   3.   6.   5.]
Epoch:  2 | Step:  0 | batch x:  [ 3.  9.  2.  6.  7.] | batch y:  [ 8.  2.  9.  5.  4.]
Epoch:  2 | Step:  1 | batch x:  [ 10.   4.   8.   1.   5.] | batch y:  [  1.   7.   3.  10.   6.]
"""

---------------------

pythorch 基本学习相关推荐

  1. 使用NVIDIA A100 TF32获得即时加速

    使用NVIDIA A100 TF32获得即时加速 NVIDIA A100带来了我们公司历史上最大的单代性能增长.这是一个新的结构创新,这是一个多功能的支持,这是一个多功能的结构支持.TF32是用于深度 ...

  2. pythorch学习笔记

    Pytorch学习笔记(一) https://blog.csdn.net/kongshuchen/article/details/72190633

  3. 利用MONAI加速医学影像学的深度学习研究

    利用MONAI加速医学影像学的深度学习研究 Accelerating Deep Learning Research in Medical Imaging Using MONAI 医学开放式人工智能网络 ...

  4. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  5. 构建深度学习框架运行平台

    构建深度学习框架运行平台 将为TensorFlow.PyTorch和TorchScript之外的元素构建一个简单的深度学习框架运行平台模型.将展示如何从Python和C++运行推理. 打包和推断接口还 ...

  6. 深度学习基础:张量运算

    英语原文:Tensor Operations - Basic Building Blocks of Deep Learning 翻译:雷锋字幕组(大表哥.Shangru) 2012-至今:深度学习爆炸 ...

  7. Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)

    近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在 RTX 30 系列 GPU上通过 pip/conda 安装 TensorFlow 或 PyTorch.因为这些 GPU 需要 CUDA ...

  8. 【深度学习】在PyTorch中构建高效的自定义数据集

    文章来源于磐创AI,作者磐创AI 学习Dataset类的来龙去脉,使用干净的代码结构,同时最大限度地减少在训练期间管理大量数据的麻烦. 神经网络训练在数据管理上可能很难做到"大规模" ...

  9. 深度学习入门之PyTorch学习笔记:深度学习框架

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...

最新文章

  1. iptables防火墙策略
  2. linux安装和配置 mysql、redis 过程中遇到的问题记录(转)
  3. sqlserver服务启动后停止,传递给数据库 'master' 中的日志扫描操作的日志扫描号无效...
  4. android 融云sdk集成,使用融云SDK集成
  5. bo dto java vo_Java 键对象 KO (key object) 介绍
  6. 手把手教你做关键词匹配项目(搜索引擎)---- 第十一天
  7. 推荐一个PPT挣钱路子,日赚800-1000元
  8. python open读取_读取文件—open()、read()
  9. C# DevExpress组件 - ChartControl图表控件
  10. 不同分子量的PEG衍生物试剂,DSPE-PEG6-Mal
  11. mysql fabric HA测试
  12. 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:
  13. python为什么运行不了_python为什么安装了运行不了?
  14. 灭霸只是开始 看数字王国的虚拟版图
  15. navicat连接LinuxMySQL10038错误、mysql通过命令行进行导入导出sql文件
  16. BurpSuite--Proxy详解
  17. 非煤矿山生产安全事故应急预案
  18. mac发送微信表情卡顿(已解决!!!!)
  19. FastDFS收藏起来,现在开始用Minio吧
  20. 微软新冠病毒感染员工的自白

热门文章

  1. Allegro等长走线设计遇到的一些问题
  2. 60 个神级 VS Code 插件,助你打造最强编辑器
  3. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本
  4. 计算机课有实验课吗,高校计算机实验课的改革探索
  5. 本学期3个sprint的团队贡献分
  6. # 7-45 航空公司VIP客户查询 (25 分)
  7. Android开发该学习哪些东西?
  8. ubuntu16下 vscode配置ros和opencv路径
  9. NodeJS Addon开发
  10. 帮我写一份情书给在一起200天的女朋友,要求1000字