深度学习学习日记4.15 (面向GPT学习)

精确学习时间(09点35分开始)

深度学习

    • torch.nn
    • torch.utils.data
    • numpy
    • torchvision中的模块有哪些
    • os 模块
    • PIL(Python Imaging Library)
    • tqdm
    • matplotlib
    • nn.ReLU inplace参数设为True
    • nn.relu
  • 训练的迭代过程
    • 梯度清零
    • loss指标计算
    • 为什么要加上item?
    • 分割预测图像的理解
      • 在计算损失时,使用 len(trainloader.dataset) 的目的是为了得到整个训练集的样本数量,从而计算出平均损失(average loss)。这是因为损失值通常是单个样本的损失之和,然后再除以样本数量来得到平均损失。
      • 在计算 epoch 中的准确率(epoch_acc)时,使用 total(total 是一个累加变量,用于记录已经处理过的样本数量。) 是更加准确的做法,因为它记录了实际处理过的样本数量,而不是简单地依赖于数据集的总样本数。

torch.nn

在这里插入图片描述
Module:所有神经网络模块的基类。如果你想自定义一个神经网络模块,需要继承自 torch.nn.Module,并实现其中的 forward 方法。
Linear:全连接层,也称为仿射层。它接收输入特征并输出通过学习得到的权重和偏置进行线性变换后的结果。

Conv2d:二维卷积层。用于处理二维图像数据,通过滑动卷积核在输入图像上提取特征。

MaxPool2d 和 AvgPool2d:分别为二维最大池化层和平均池化层,用于减小输入特征图的尺寸并提取最显著的特征
ReLU:修正线性单元激活函数。用于引入非线性性质,增加神经网络的拟合能力。
Sequential:一个容器,按顺序包含了一系列神经网络层。可以通过将各种层组合在一起来构建更复杂的神经网络。
CrossEntropyLoss:交叉熵损失函数。常用于多分类任务的损失函数。

torch.utils.data

在这里插入图片描述
Dataset 类:定义了一个抽象的数据集类,所有自定义数据集都应该继承自该类,并实现 lengetitem 方法。这些方法用于获取数据集的长度和索引对应位置的数据样本。
DataLoader 类:用于将数据集划分为小批量并提供多进程数据加载功能。它可以指定批量大小、是否随机洗牌、是否使用多进程加载等参数,从而方便地将数据提供给神经网络进行训练。

numpy

NumPy 是 Python 中用于数值计算和数据处理的核心库,提供了高效的多维数组对象(ndarray)、广播功能、数学函数、线性代数运算等工具,为科学计算和数据分析提供了强大的支持。

torchvision中的模块有哪些

在这里插入图片描述
transforms:用于对图像进行预处理和数据增强的模块,包括常见的操作如裁剪、缩放、旋转、翻转、归一化等。

os 模块

Python 中用于与操作系统进行交互的标准库之一,它提供了许多与文件系统和操作系统交互的功能。
1.文件和目录操作:
os.getcwd():获取当前工作目录的路径。
os.chdir(path):改变当前工作目录为指定路径。
os.listdir(path=‘.’):返回指定目录下的所有文件和目录的列表。
os.mkdir(path):创建一个新目录。
os.makedirs(path):递归创建多层目录。
os.remove(path):删除指定路径的文件。
os.rmdir(path):删除指定路径的空目录。
os.removedirs(path):递归删除多层目录。
2.路径操作:
os.path.join(path1, path2, …):拼接路径。
os.path.exists(path):判断路径是否存在。
os.path.isfile(path):判断路径是否为文件。
os.path.isdir(path):判断路径是否为目录。
os.path.basename(path):返回路径中的文件名部分。
os.path.dirname(path):返回路径中的目录部分。
os.path.split(path):将路径分割成目录和文件名两部分。
os.path.splitext(path):分割路径的扩展名。
3.系统环境和变量:
os.environ:一个包含环境变量的字典。
os.getenv(name, default=None):获取指定环境变量的值。
4.执行系统命令:
os.system(command):在操作系统上执行命令。
os.popen(command):以读模式打开一个管道,从而可以读取命令的输出。
5.其他功能:
os.getpid():获取当前进程的进程号。
os.kill(pid, signal):向进程发送信号。
os.path.getsize(path):获取文件大小。
os.path.abspath(path):返回绝对路径。
os.path.normpath(path):规范化路径。

PIL(Python Imaging Library)

Python 中用于图像处理的常用库之一。
1.Image 类:用于表示图像的类,提供了许多图像处理的方法和属性。
open():打开图像文件。
save():保存图像到文件。
show():显示图像。
resize(size, resample=0):调整图像大小。
crop(box):裁剪图像。
rotate(angle, resample=0, expand=False):旋转图像。
transpose(method):转置图像。
convert(mode=None, matrix=None, dither=None, palette=0, colors=256):转换图像的色彩模式。
paste(im, box, mask=None):粘贴图像到另一个图像上。
2.ImageFilter 类:用于应用滤波器和增强图像的类。
BLUR:模糊滤波器。
CONTOUR:轮廓滤波器。
DETAIL:细节滤波器。
EDGE_ENHANCE:边缘增强滤波器。
EMBOSS:浮雕滤波器。
FIND_EDGES:边缘检测滤波器。
SHARPEN:锐化滤波器。
3.ImageDraw 类:用于在图像上绘制各种形状和文本。
point(xy, fill=None):在指定位置绘制点。
line(xy, fill=None, width=0):绘制直线。
rectangle(xy, fill=None, outline=None, width=0):绘制矩形。
ellipse(xy, fill=None, outline=None, width=0):绘制椭圆。
polygon(xy, fill=None, outline=None):绘制多边形。
text(xy, text, fill=None, font=None):在指定位置绘制文本。
4.ImageFont 类:用于加载和操作字体文件的类。
load_default():加载默认字体。
truetype(font, size):加载 TrueType 字体文件。
5.ImageEnhance 类:用于增强图像的亮度、对比度和锐度。
Brightness(image):亮度增强。
Contrast(image):对比度增强。
Sharpness(image):锐度增强。
6.ImageOps 模块:提供了一些图像操作的函数。
autocontrast(image, cutoff=0):自动调整图像的对比度。
colorize(image, black, white):对图像进行着色。
grayscale(image):将图像转换为灰度图像。
invert(image):反转图像的颜色。
mirror(image):镜像图像。

tqdm

tqdm 是一个用于在 Python 中添加进度条的库,它提供了一种简单而灵活的方式来监视循环的进度。tqdm 的全称是 “taqaddum”,是阿拉伯语,意思是 “进步” 或 “前进”。使用 tqdm 可以为循环迭代过程添加一个美观的进度条,帮助用户了解循环的进度以及估计剩余时间。
tdqm 可以用于任何可迭代对象的循环,例如列表、元组、集合等,以及文件读取、网络请求等耗时操作。你只需要将你的迭代对象作为参数传递给 tqdm 函数即可。tqdm 会自动估计迭代的总体进度,并显示进度条、完成百分比、已完成的迭代次数、以及每秒处理的迭代次数等信息。
在这里插入图片描述

matplotlib

import matplotlib.pyplot as plt #导入Matplotlib库,Matplotlib是Python中用于绘制图表的库,pyplot模块提供了类似于MATLAB的绘图接口。
%matplotlib inline#这是一个IPython魔术命令,用于在Jupyter Notebook中内联显示Matplotlib绘图,使得绘图结果直接显示在单元格中。

nn.ReLU inplace参数设为True

在创建 nn.ReLU 实例时,可以选择设置参数 inplace 的值。**当 inplace=True 时,ReLU 函数将会直接修改输入张量,而不会分配新的内存来存储输出。**这样可以节省一些内存空间,但是也会修改输入张量的值,可能会影响计算图的后续操作。
在这里插入图片描述在这里插入图片描述

nn.relu

1.作用:ReLU 是神经网络中常用的激活函数之一,用于增加神经网络的非线性特性。它的输出等于输入的正值部分,小于零的部分被置为零。即,对于输入 x,ReLU 函数的输出为 max(0, x)。
2.非线性特性:ReLU 的主要作用是引入非线性性质,使神经网络能够学习非线性函数。这有助于网络更好地拟合复杂的数据分布和模式。
3.梯度:ReLU 在正值部分的导数为 1,而在负值部分的导数为 0。这意味着当输入为正时,梯度为 1,可以有效地传播梯度;而当输入为负时,梯度为 0,可能会导致梯度消失问题。
4.稀疏激活:由于 ReLU 在负值部分输出为零,因此会导致网络中一部分神经元处于非激活状态,从而产生稀疏激活性质,有助于减少模型过拟合的可能性。
5.适用性:ReLU 在实践中被广泛使用,并且通常在隐藏层中使用。但需要注意的是,对于输出层,根据具体问题的要求,可能需要选择其他类型的激活函数,如 sigmoid、softmax 等。

训练的迭代过程

1.求损失:首先计算模型的输出与真实标签之间的损失。
2.梯度清零:然后将之前计算的梯度清零,这是因为 PyTorch 中梯度是累积的,所以每次迭代前需要将之前的梯度清零。
3.反向传播:接着进行反向传播,计算损失对模型参数的梯度。
4.梯度更新:最后使用优化器根据计算得到的梯度更新模型的参数
在这里插入图片描述
在这里插入图片描述

梯度清零

在进行反向传播之前,必须清除(归零)旧的梯度。因为如果不清除,新的梯度会和旧的梯度累加,这会导致错误的更新方向。这是因为每次迭代应只考虑当前批次的数据。

loss指标计算

在这里插入图片描述
在这里插入图片描述

为什么要加上item?

将张量转换成python数值
在这里插入图片描述

分割预测图像的理解

 correct = 0total = 0running_loss = 0epoch_iou = []model.train()for x, y in tqdm(trainloader):if torch.cuda.is_available():x, y = x.to('cuda'), y.to('cuda')y_pred = model(x) #[128, 2, 128, 128]y= torch.squeeze(y).long()loss = loss_fn(y_pred,y)optimizer.zero_grad() #清零梯度loss.backward()optimizer.step() #使用优化器更新权重with torch.no_grad():y_pred = torch.argmax(y_pred, dim=1)  #torch.Size([128, 128, 128])#print(y_pred.shape)   correct += (y_pred == y).sum().item()total += y.size(0)   #torch.Size([16, 128, 128])#print(y.size)running_loss += loss.item()##iouintersection = torch.logical_and(y, y_pred)union = torch.logical_or(y, y_pred)batch_iou = torch.sum(intersection) / torch.sum(union)batch_iou=batch_iou.cpu().numpy()epoch_iou.append(batch_iou)epoch_loss = running_loss / len(trainloader.dataset)epoch_acc = correct / (total*128*128)  #预测正确像素点/总共像素点

在这里插入图片描述
在这里插入图片描述

在计算损失时,使用 len(trainloader.dataset) 的目的是为了得到整个训练集的样本数量,从而计算出平均损失(average loss)。这是因为损失值通常是单个样本的损失之和,然后再除以样本数量来得到平均损失。

在这里插入图片描述

在计算 epoch 中的准确率(epoch_acc)时,使用 total(total 是一个累加变量,用于记录已经处理过的样本数量。) 是更加准确的做法,因为它记录了实际处理过的样本数量,而不是简单地依赖于数据集的总样本数。

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

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

相关文章

SQLite超详细的编译时选项(十六)

返回:SQLite—系列文章目录 上一篇:SQLite数据库文件格式(十五) 下一篇:SQLite 在Android安装与定制方案(十七) 1. 概述 对于大多数目的,SQLite可以使用默认的 编译选项。但是…

WinForms 零基础进阶教程:文件操作与 CSV 处理

文章目录 文件操作数据存储与文件操作文件存取的好处文件存取的方式文本文件的写入和读取文本文件的删除、复制和移动 目录的操作文件属性操作文件路径 对话框OpenFileDialog对话框SaveFileDialog对话框对话框中CheckPathExists属性的应用 CSV 文件读写与 DataGridView 进阶Dat…

Python基于Django的微博热搜、微博舆论可视化系统

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Redis限流插件

Redis限流插件: 1:搭建层级结构 同时对 redis.log 授权 chmod 777 redis.log2:确认 redis 版本 3:下载redis配置文件 redis.conf https://redis.io/docs/management/config/ 4:上传/redis/conf作为原始 redis.conf 5:在/redis_6390/conf下编辑redis.conf docker run -it \ --…

51单片机上面的IIC协议

1、什么是IIC协议 2、模拟IIC协议 51单片机上面是没有与IIC协议相关的寄存器的(没有相关的硬件),不像串口可以配置对应的寄存器达到目的(比如修改波特率9600 or 115200),要配置IIC只能够根据用户手册里面的…

​面试经典150题——LRU 缓存

​ 1. 题目描述 2. 题目分析与解析 首先讲解一下LRU LRU 是“Least Recently Used”的缩写,LRU 算法的基本思想是跟踪最近最少使用的数据,并在缓存已满且需要存储新数据时优先驱逐该数据。 LRU 算法通常的工作原理的简化解释: 当访问或使…

vue.config.js跨域问题解决

讲解视频 问题背景 目标地址: 而当前项目启动是http,协议名不同,所以跨域了 解决步骤和解答 1. 新建vue.config.js文件 2. 添加如下代码: 一般目标路径target写 域名 就可以了 但其实,写路径也可以,…

查看 Linux 接入的 USB 设备速率是 USB2 还是 USB3

查看接入 usb 设备的速率 使用以下命令查看接入的 USB 设备速率(每一行最后的 xxM 字样)。插入设备前查看一次,插入设备后查看一次,对比即可定位到刚插入的设备是哪一条。 lsusb -t命令输出如下图 对照 USB 速率表 对照 USB 速…

EasyRecovery数据恢复软件2024试用版下载安装包

EasyRecovery支持的文件格式非常广泛,几乎涵盖了用户日常所需的所有文件类型。具体来说,它支持恢复的办公文档类型包括Microsoft Word、Excel、PPT、MS office、Adobe PDF、Access等。此外,对于音频文件,EasyRecovery同样支持丰富…

初识three.js创建第一个threejs3D页面

说到3D&#xff0c;想必大家都能想到three.js&#xff0c;它是由WebGL封装出来的&#xff0c;接下来&#xff0c;我手把手教大家创建一个简单的3D页面 话尽在代码中&#xff0c;哈哈 大家可以复制代码玩一下 <!DOCTYPE html> <html lang"en"><head&…

【嵌入式 - 输出驱动电路Open Drain (开漏)和Push-Pull (推挽)】

定义 Open drain 和 push-pull 是两种常见的输出驱动电路。它们在数字电子电路中用于控制信号的输出。让我逐一解释它们&#xff1a; 1. Open Drain (开漏): Open drain 输出端通常连接到地 (GND) 或者一个高电阻 (pull-up) 上。当输出信号为逻辑高电平时&#xff0c;输出端…

【位运算】Leetcode 丢失的数字

题目解析 268. 丢失的数字 本题的意思就是数组的长度为n&#xff0c;在[0,n]区间中寻找缺失的一个数字 算法讲解 直观思路&#xff1a;排序 Hash&#xff0c;顺序查找缺失的数字 优化&#xff1a;使用异或&#xff0c;首先将[0,n]之间所有数字异或在一起&#xff0c;然后将…

链表创建的陷阱与细节

链表是线性表的一种&#xff0c;它在逻辑结构上是连续的&#xff0c;在物理结构上是非连续的。 也就是说链表在物理空间上是独立的&#xff0c;可能是东一块西一块的。如下顺序表和链表在内存空间上的对比&#xff1a; 而链表的每一块空间是如何产生联系实现在逻辑结构上是连续…

移动应用安全合规动态:网信办、金管局发文强调数据安全;3月个人信息违规抽查结果出炉!(第五期)

一、监管部门动向&#xff1a;国家互联网信息办公室公布《促进和规范数据跨境流动规定》; 工信部发布《关于网络安全保险典型服务方案目录的公示》 二、安全新闻&#xff1a;恶意软件警报&#xff01;黑客利用软件即服务攻击印度安卓用户&#xff1b;Cerberus银行恶意软件的虚…

第十四届蓝桥杯题解:平方差 ,更小的数,买瓜,网络稳定性(货车运输)

目录 平方差 更小的数 买瓜 网络稳定性&#xff08;货车运输&#xff09; 货车运输 平方差 这道题就是数论的题&#xff0c;不难想到一个数m可以拆成(a-b)(ab)&#xff0c;其实(a-b)和(ab)就是m的一对因子&#xff0c;不妨设为x和y。 则有&#xff1a; abx; a-by; x*ym; 联…

JVM—jps、jstat、jinfo、jmap、jstack的使用

JVM—jps、jstat、jinfo、jmap、jstack的使用 jps jps全称&#xff1a;Java Virtual Machine Process Status Tool 可以查看Java进程&#xff0c;相当于Linux下的ps命令&#xff0c;只不过它只列出Java进程。 jps:列出Jav程序ID和Main函数名称 jps -q:只输出进程ID jps -m …

MATLAB4:数值计算

文章目录 一、实验目的二、实验内容三、仿真结果四、实践中遇到的问题及解决方法 一、实验目的 1. 熟悉根据已知数据进行回归法曲线拟合。   2. 熟悉根据已知数据进行多项式曲线拟合。   3. 熟悉根据已知数据利用指定方法进行数据插值&#xff08;临近插值、线性插值、立方…

小程序视频如何下载到电脑上

小程序视频如何下载到电脑上&#xff0c;很简单 1.利用Fiddler和Charles这些专业的抓包工具 2.利用录屏 3.利用专门抓取资源的工具(集成了抓取下载&#xff0c;而且对资源下载很友好) 工具我已经打包好了 下载高手链接&#xff1a;https://pan.baidu.com/s/1qJ81sNBzzzU0w…

Linux的学习之路:6、Linux编译器-gcc/g++使用

摘要 本文主要是说一些gcc的使用&#xff0c;g和gcc使用一样就没有特殊讲述。 目录 摘要 一、背景知识 二、gcc如何完成 1、预处理(进行宏替换) 2、编译&#xff08;生成汇编&#xff09; 3、汇编&#xff08;生成机器可识别代码 4、链接&#xff08;生成可执行文件或…

【我的代码生成器】生成React页面类

有了数据表的结构信息&#xff0c;就能生成React 的页面类&#xff0c;快捷方便。 生成界面如下&#xff1a; 生成的React FrmUser.js页面如下&#xff1a; 只需再写里面的操作逻辑代码。