pythorch 基本学习
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 基本学习相关推荐
- 使用NVIDIA A100 TF32获得即时加速
使用NVIDIA A100 TF32获得即时加速 NVIDIA A100带来了我们公司历史上最大的单代性能增长.这是一个新的结构创新,这是一个多功能的支持,这是一个多功能的结构支持.TF32是用于深度 ...
- pythorch学习笔记
Pytorch学习笔记(一) https://blog.csdn.net/kongshuchen/article/details/72190633
- 利用MONAI加速医学影像学的深度学习研究
利用MONAI加速医学影像学的深度学习研究 Accelerating Deep Learning Research in Medical Imaging Using MONAI 医学开放式人工智能网络 ...
- 基于NVIDIA GPUs的深度学习训练新优化
基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...
- 构建深度学习框架运行平台
构建深度学习框架运行平台 将为TensorFlow.PyTorch和TorchScript之外的元素构建一个简单的深度学习框架运行平台模型.将展示如何从Python和C++运行推理. 打包和推断接口还 ...
- 深度学习基础:张量运算
英语原文:Tensor Operations - Basic Building Blocks of Deep Learning 翻译:雷锋字幕组(大表哥.Shangru) 2012-至今:深度学习爆炸 ...
- Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)
近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在 RTX 30 系列 GPU上通过 pip/conda 安装 TensorFlow 或 PyTorch.因为这些 GPU 需要 CUDA ...
- 【深度学习】在PyTorch中构建高效的自定义数据集
文章来源于磐创AI,作者磐创AI 学习Dataset类的来龙去脉,使用干净的代码结构,同时最大限度地减少在训练期间管理大量数据的麻烦. 神经网络训练在数据管理上可能很难做到"大规模" ...
- 深度学习入门之PyTorch学习笔记:深度学习框架
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 2.1 深度学习框架介绍 2.1.1 TensorFlow 2.1.2 Caffe 2.1.3 Theano 2.1.4 ...
最新文章
- iptables防火墙策略
- linux安装和配置 mysql、redis 过程中遇到的问题记录(转)
- sqlserver服务启动后停止,传递给数据库 'master' 中的日志扫描操作的日志扫描号无效...
- android 融云sdk集成,使用融云SDK集成
- bo dto java vo_Java 键对象 KO (key object) 介绍
- 手把手教你做关键词匹配项目(搜索引擎)---- 第十一天
- 推荐一个PPT挣钱路子,日赚800-1000元
- python open读取_读取文件—open()、read()
- C# DevExpress组件 - ChartControl图表控件
- 不同分子量的PEG衍生物试剂,DSPE-PEG6-Mal
- mysql fabric HA测试
- 一个公司存在不同职位,不同职位计算工资的方法也不相同。工资可能是固定的,也可能根据销售额或工作量来计算。假设公司有三种职务:经理、计件工人和计时工人:他们的工资组成分别为:
- python为什么运行不了_python为什么安装了运行不了?
- 灭霸只是开始 看数字王国的虚拟版图
- navicat连接LinuxMySQL10038错误、mysql通过命令行进行导入导出sql文件
- BurpSuite--Proxy详解
- 非煤矿山生产安全事故应急预案
- mac发送微信表情卡顿(已解决!!!!)
- FastDFS收藏起来,现在开始用Minio吧
- 微软新冠病毒感染员工的自白