基于深度学习的三维重建(二):pytorch的简单操作及DataLoader、Dataset类简介

news2024/9/29 1:18:45

目录

1.numpy举几个demo

2.pytorch基础

2.1 tensor介绍

3.简单版DataSet & DataLoader

4.模型构建

5.深度学习模型demo:手写文字识别

5.1  构建网络

5.2 前向传播过程

5.3 训练部分

5.4 测试部分

5.5 模型导出

5.6 模型测试

6.pytorch可视化工具tensorboard

7.pytorch实用小工具


1.numpy举几个demo

demo1:numpy索引

if __name__ == '__main__':
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(a[1:])                                #从第二行开始切割
    print('\n')

    print(a[...,1])                             #第二列所有行
    print('\n')

    print(a[1,...])                             #第二行的所有列
    print('\n')

    print(a[...,1:])                            #从第一列开始切割的所有行

demo2:reshape

if __name__ == '__main__':
    a = np.arange(8)
    print(a)
    
    b = a.reshape(4,2)
    print(b)

demo3:transpose维度互换

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = a.transpose()
    print(b)

demo4:expand_dims

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = np.expand_dims(a,axis=0)
    print(b)
    print(b.shape)

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)

    b = np.expand_dims(a,axis=1)
    print(b)
    print(b.shape)

if __name__ == '__main__':
    a = np.arange(12).reshape(3,4)
    print(a)
    print('\n')
    b = np.expand_dims(a,axis=2)
    print(b)
    print(b.shape)

demo5:squeeze

if __name__ == '__main__':
    a = np.arange(9).reshape(1,3,3)

    y = np.squeeze(a)

    print(y)

demo6:concatenate

if __name__ == '__main__':
    a = np.array([[1,2],[3,4]])
    b = np.array([[5,6],[7,8]])

    print(np.concatenate((a,b),axis=0))

if __name__ == '__main__':
    a = np.array([[1,2],[3,4]])
    b = np.array([[5,6],[7,8]])

    print(np.concatenate((a,b),axis=1))

2.pytorch基础

2.1 tensor介绍

 demo1:数据转换

if __name__ == '__main__':
    data = [[1,2],[3,4]]
    x_data = torch.tensor(data)

    print(x_data)

demo2:数据转换

if __name__ == '__main__':
    data = np.array([[1,2],[3,4]])
    x_data = torch.from_numpy(data)

    print(x_data)

demo3:随机初始化

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape)

demo4:

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape,device="cuda")
    print(rand_tensor)
    print(ones_tensor)
    print(zeros_tensor)
    print(torch.cuda.is_available())
    print(f"shape of the tensor:{rand_tensor.shape}")
    print(f"datatype of the tensor:{rand_tensor.dtype}")
    print(f"Device of the tensor:{rand_tensor.device}")

if __name__ == '__main__':
    shape = (2,3,)
    rand_tensor = torch.rand(shape)
    ones_tensor = torch.ones(shape)
    zeros_tensor = torch.zeros(shape)
    zeros_tensor = zeros_tensor.to('cuda')
    print(rand_tensor)
    print(ones_tensor)
    print(zeros_tensor)
    print(torch.cuda.is_available())
    print(f"shape of the tensor:{rand_tensor.shape}")
    print(f"datatype of the tensor:{rand_tensor.dtype}")
    print(f"Device of the tensor:{zeros_tensor.device}")

3.简单版DataSet & DataLoader

        我们看MVSDataset类,代码在datasets/custom.py

        初始化,传入图片路径并定义一个类获取图片的列表

 

        重载样本获取方法:

        测试模型:

4.模型构建

        举例:

        在神经网络中,我们实现forward函数进行正向传播:

        有的时候(迁移学习,我们可能会禁用一些层的梯度):

        优化:

        模型加载和保存:

        train和eval模式介绍:

5.深度学习模型demo:手写文字识别

        先说一下我们自己搭建网络时候的一些文件夹属性:

        __pycache__是python自动生成的。

        checkpoints文件夹我们放模型数据用的,即训练权重(预训练权重):

        datasets:重写数据加载的py文件(定义自己的数据怎么输入到目标网络中的数据格式转换)

        model.py:模型文件,即算法主体。

        train.py、eval.py:训练和测试的脚本。

        data:放数据集

5.1  构建网络

        手写文字识别主要构建的是一个卷积神经网络,类的初始化初始化类别为10(0-9十个数字)

        定义了两个卷积层,nn.Sequential是一个存储器,我们调用layer1的时候执行layer1里面定义的操作顺序执行。

5.2 前向传播过程

        对于一个输入的图片,调用ConvNet中的卷积网络进行处理,输入是一张1*28*28的图片(batchsize=b),因此输入shape为b*1*28*28,经过layer1卷积后,shape变为b*16*14*14。经过layer2卷积后,shape变为b*32*7*7。对其展平,shape变成b*10,得到并返回结果。

5.3 训练部分

        判断gpu是否可用并配置参数,大型项目一般有config.py文件存储配置信息。

        加载数据。

        模型初始化:

         定义损失和优化器:

        开始训练:

5.4 测试部分

5.5 模型导出

5.6 模型测试

6.pytorch可视化工具tensorboard

        如何调用:模块加载

        运行train.py后,会在./log文件夹下保存一个类似events.out.tfevents.xxx

        如何打开这个文件呢?在终端输入 tensorboard --logdir=./log

        在浏览器打开网址:

        在代码中,需要先初始化tensorboard:

        看一下里面的参数:

7.pytorch实用小工具

        summary:

         输出示例:

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库调优————索引数据结构

B-TREE B-TREE数据结构 B-TREE特性 根节点的子结点个数2 < X < m&#xff0c;m是树的阶 假设m 3&#xff0c;则根节点可有2-3个孩子 中间节点的子节点个数m/2 < y < m 假设m 3&#xff0c;中间节点至少有2个孩子&#xff0c;最多3个孩子 每个中间节点包含n个关…

《MySql学习》 行锁对业务的影响

一. 行锁介绍 行锁由各个存储引擎分别实现&#xff0c;MyISAM存储引擎是不支持行锁的&#xff0c;这也是MySQL使用InnoDB作为默认存储引擎的一个重要原因&#xff0c;锁更细的InnoDB能支持更多的并发业务。但需要注意的是&#xff0c;行锁在InnoDB的实现是给索引加的锁&#x…

智慧养殖无线通讯解决方案

一、方案概述农植畜禽/水产养殖智能监控系统可以在远端设备实现对如温度、湿度、气体浓度、光照度等传感设备的自动调节与控制功能。管理者可随时通过电脑了解养殖场各环节的运行状况&#xff0c;并根据养殖现场内外环境因子的变化情况将命令下发到现场执行设备。为动植物营造舒…

docker-compose安装SonarQube

前言SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码&#xff0c; 潜在bug&#xff0c; 代码规范&#xff0c;安全性漏洞等问题&#xff0c; 并通过SonarQube web UI展示出来。一、docker-compose配置#v…

【Python】编写代码实现指定下标值顺序进行正序和倒序排序算法编程

&#x1f389;&#x1f389; 在本次python文章中&#xff0c;主要通过定义一个排序方法&#xff0c;实现一组数列能够按照另一组数列指定的位置进行重新排序输出&#xff0c;默认正序排序&#xff0c;可通过True表示逆序输出 目录1、知识点2、数列和元组1&#xff09;错误遍历方…

全网多种方式解决Knife4j文档请求异常

文章目录1. 复现问题2. 分析问题3. 解决问题4. 其他方法解决此异常5. 其他说明1. 复现问题 今天在本地启动项目后&#xff0c;刷新Knife4j接口文档&#xff0c;却报出如下错误&#xff1a; 即Knife4j文档请求异常。 2. 分析问题 报出Knife4j文档请求异常错误时&#xff0c;赶…

生活不一定很酷,但是一定要全力以赴

题记&#xff1a;努力是为了让自己不平庸 当看到这个话题“竞赛那些事”&#xff0c;我还是有所触动的&#xff0c;我本身就是一个不喜欢安逸&#xff0c;喜欢折腾的人&#xff0c;纵使不能把日子过成诗&#xff0c;也要折腾成向往的样子。 我的记忆在脑海中不停翻着页&#x…

黑马redis学习记录:分布式锁

一、基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xff0c;让程序串行…

Linux_基本权限

Linux入门第二篇已送达&#xff01; Linux_基本权限shell外壳权限Linux的用户分类角色划分Linux的文件文件类型查看权限目录的权限默认权限粘滞位shell外壳 为了保护操作系统&#xff0c;用户的指令不能由操作系统直接进行执行&#xff0c;需要一个中间者&#xff0c;比如Linu…

MySQL优化篇-MySQL压力测试

备注:测试数据库版本为MySQL 8.0 MySQL压力测试概述 为什么压力测试很重要&#xff1f;因为压力测试是唯一方便有效的、可以学习系统在给定的工作负载下会发生什么的方法。压力测试可以观察系统在不同压力下的行为&#xff0c;评估系统的容量&#xff0c;掌握哪些是重要的变化…

基于ThinkPHP6.0+Vue+uni-app的多商户商城系统好用吗?

likeshop多商户商城系统适用于B2B2C、多商户、商家入驻、平台商城场景。完美契合平台自营联营加盟等多种经营方式使用&#xff0c;系统拥有丰富的营销玩法&#xff0c;强大的分销能力&#xff0c;支持官方旗舰店&#xff0c;商家入驻&#xff0c;平台抽佣商家独立结算&#xff…

重生之我是赏金猎人-SRC漏洞挖掘(八)-记一次移花接木的GetShell

0x00&#xff1a;前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎亲们点个star 作者&#xff1a;RGM78sec 某天测厂商业务时&#xff0c;发现其中有一个提供音乐播放业务的资产&#xff0c;正好里面有我想听的歌&#xff0c;于是就有了这篇文章 0x01&#xff1a;…

天翼云服务器如何限制端口仅限部分ip地址访问

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近买了个服务器&#xff0c;没错&#xff0c;是天翼云的。 客户没有钱&#xff0c;买大厂的太贵舍不得&#xff0c;那就买个普通的吧&#xff0c;经媒人介绍&#xff0c;觉得天翼…

vue小案例

vue小案例 组件化编码流程 1.拆分静态组件&#xff0c;按功能点拆分 2.实现动态组件 3.实现交互 文章目录vue小案例组件化编码流程1.父组件给子组件传值2.通过APP组件给子组件传值。3.案例实现4.项目小细节1.父组件给子组件传值 父组件给子组件传值 1.在父组件中写好要传的值&a…

5min完成linux环境Jenkins的安装

5min搞定linux环境Jenkins的安装安装Jenkinsstep1: 使用wget 命令下载Jenkinsstep2、创建Jenkins日志目录并运行jekinsstep3、访问jenkins并解锁jenkins&#xff0c;安装插件以及创建管理员用户step4、到此&#xff0c;就完成了Finish、以上步骤中遇到的问题1、 jenkins启动不了…

Python爬虫(5)-selenium用显式等待、隐式等待、强制等待,解决反复爬取网页时无法定位元素问题

之前的文章有关于更多操作方式详细解答&#xff0c;本篇基于前面的知识点进行操作&#xff0c;如果不了解可以先看之前的文章 Python爬虫&#xff08;1&#xff09;一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫&#xff08;2&#xff09;-Selenium控制浏览…

MybatisPlus实现分页效果并解决can‘t found IPage for args!错误

前言 早就知道MybatisPlus对分页进行了处理&#xff0c;但是一直没有实战用过&#xff0c;用的是自己封装的一个分页组件&#xff0c;虽不说麻烦吧&#xff0c;但是也不是特别简单。 写起来还是比较复杂&#xff0c;但是最近这个组件有了点小小的bug&#xff0c;我决定是时候…

公网连接内网工具推荐(还在为局域网联机发愁?)

一、FastNat可为您解决的问题1.没有公网服务器&#xff0c;需要发布本地的站点或网络程序到公网上&#xff0c;供他人访问&#xff1b;此项功能大大方面开发人员进行远程调试&#xff0c;微信小程序等开发工作进行。2.需要远程到在其他网络中的设备&#xff0c;但两处的网络不通…

安装ENVI Py for ArcGIS

目录 软件版本 配置环境 在cmd命令行中输入 启动ArcGIS Pro&#xff0c;点击Start with another template。 在刚才的路径中找到文件ENVIPyManagement.aptx&#xff0c;点击OK。 软件版本 ArcGIS Pro 3.0.2 ENVI 5.6 其他版本请参考官方帮助文档&#xff0c;方法类似。 …

五、HTML之表单

文章目录一、表单的作用1.1 常用控件1.2 宽高自适应1.3 窗口自适应1.4 伪元素选择器1.5 浮动高度塌陷问题1.6 左侧一栏为200px余下的右边栏占余下屏幕一、表单的作用 表单用来收集用户的信息。 语法&#xff1a; <form action "提交地址" method"提交方法…