当前位置: 首页 > news >正文

[pytorch]设备选择以及卷积神经网络的应用

0.写在前面:

首先这篇文章还没写完,因为今天要尝试对我之前的一个框架做一个简单的更新迭代,所以目前先更新这么多.

1.关于设备的选择

首先,目前的大多数电脑都是自带一些GPU(图形计算单元,在这里被称之为cuda), 需要安装相关的驱动才能正常使用这些设备和调用他们的具体情况.

nvidia-smi

 但是平时对于我们个人来说,我们的电脑基本无法承担上百万的数据调用,所以一般情况下,服务器是可以提供给我们这些东西.

如图所示是服务器上的GPU情况,可以看到服务器的开发者实现了一些其他的探测功能.

(1)单独设备的选取

首先注意一个情况,对于单一设备来说,我们称呼CPU为'cpu',称呼GPU为'gpu'

而在代码中,设备时被抽象为一个对象,我们可以通过torch包下的device来指定某个设备:

torch.device('cpu')
torch.device('cuda') # 默认找到地0个GPU
torch.device('cuda:1') # 可以指定第一个GPU# 以上三个函数会返回对应的一个设备连接对象

 以上三个函数用来创建设备链接对象没通过这些设备可以获得具体的对象

当然在拿不准的时候,可以直接查询GPU的数目

torch.cuda.device_count()

 

2.关于卷积神经网络的简单应用情况

如何构建神经网络,其实在上一篇博客中已经说到了,这里就简单介绍几个神经网络层构建函数

(1)卷积层

卷积层实现的效果其实就是一个简单的乘法加和,原理如图所示

import torch.nn as nnnn.Con2d( input_channels, kernet_num ,kernel_size=?, padding=0, stride=1)

 注意一下参数中的第二个参数是我个人的理解,其实按照正常的普遍理解,这个应该叫"输出通道数目".

(2)平均池化层

(注意,大池化层的特点之一,都是不会改变频道的数目,也就是只会修改输入的尺寸,而不会修改输入的通道数目!!!!这个的pool东西,默认只有一层通道,也就是一个2d的核)

另外两个池化层需要输入的参数只有核的大小,以及步长

import torch.nn as nnnn.AvgPool2D(kernel_size=? stride=1)

(3)最大池化层

import torch.nn as nnnn.MaxPool2D(kernel_size=? stride=1)

3.如何讲模型和设备移动到指定设备上

首先我们在大多数情况下创建的张量和模型,都是默认在cpu上面的\

arr.device    # cpu
net.device    # cuda/gpu

 而在进行模型计算的时候,需要首先将模型和张量移动到统一设备上,这样计算很省时间

虽然但是,torch对于跨设备的数据和模型,提供了一些奇奇怪怪的手段来完成一个自动传递,但是真到了在训练的时候,临时传输不可避免地会造成大量的开销

使用to函数建立新链接即可

cuda1=torch.device('cuda:1')
X = torch.tensor([0,1,2,3])
Y = X.to(cuda1)X.device # cpu
Y.device # cuda1

而对于模型来说也是一样的的移动方式,使用to函数来实现

# 顺便这里补充一个with语句
with语句用来创建一个上下文, 比如打开文件(这里要加上as)
或者说给模型设置为训练模式当with语句中的函数块执行结束以后,就可以讲with对应的操作做一个取消
with net.train():..........
当内部函数块执行结束以后,模型就会撤掉"转变为训练模式"这个操作

 

相关文章:

  • JavaWeb——HTML常用标签
  • CTFhub-RCE-文件包含
  • JS 注释
  • 【开源】基于JAVA的电子元器件管理系统
  • Postman for Mac(HTTP请求发送调试工具)v10.18.10官方版
  • SOME/IP 协议介绍(四)RPC协议规范
  • 利用RoboBrowser库和爬虫代理实现微博视频的爬取
  • acwing算法基础之搜索与图论--匈牙利算法求二分图的最大匹配数
  • Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群
  • 个人Typora存储图片专用
  • 破解tomcat密码并上传webshell
  • 双写绕过 [极客大挑战 2019]BabySQL 1
  • 社区牛奶直供站:创新供应链,满足消费者需求
  • 三、Vue3中使用Pinia修改State的方法
  • bzero和memset的区别
  • .pyc 想到的一些问题
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【mysql】环境安装、服务启动、密码设置
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Cumulo 的 ClojureScript 模块已经成型
  • C学习-枚举(九)
  • HTTP中GET与POST的区别 99%的错误认识
  • Meteor的表单提交:Form
  • nginx 负载服务器优化
  • Python爬虫--- 1.3 BS4库的解析器
  • spring + angular 实现导出excel
  • sublime配置文件
  • Travix是如何部署应用程序到Kubernetes上的
  • ViewService——一种保证客户端与服务端同步的方法
  • 机器学习中为什么要做归一化normalization
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端性能优化——回流与重绘
  • 区块链共识机制优缺点对比都是什么
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • ​flutter 代码混淆
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #if 1...#endif
  • ()、[]、{}、(())、[[]]命令替换
  • (3)llvm ir转换过程
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (九十四)函数和二维数组
  • (十六)一篇文章学会Java的常用API
  • (一)Neo4j下载安装以及初次使用
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)iOS字体
  • (转)Windows2003安全设置/维护
  • (转)编辑寄语:因为爱心,所以美丽
  • .Net core 6.0 升8.0
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net6使用Sejil可视化日志