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

李宏毅(深度学习)--(2)

一.区别DataLoader与Dataset

在代码中我们经常会看到:

from torch.utils.data import  DataLoader
from  torch.utils.data import  Dataset

(1)Dataset

Dataset 是一个抽象类,用于表示数据集。它提供了一种通用的方式来访问和操作数据。你需要继承 Dataset 类并实现 __len__ 和 __getitem__ 方法。

作用:
  • 定义如何从数据集中获取单个数据样本。
  • 提供数据集的长度信息。

(2) DataLoader

DataLoader 是一个迭代器,它封装了 Dataset 并提供了批量处理、打乱数据、并行加载等功能。它使得数据加载更加高效和灵活。

作用:
  • 将 Dataset 中的数据分成小批量。
  • 提供数据打乱、并行加载等功能。

Dataset 和 DataLoader 在 PyTorch 中扮演着不同的角色。Dataset 用于定义数据集的结构和访问方式,而 DataLoader 用于高效地加载数据集并提供批量处理等功能。通常,你会先定义一个自定义的 Dataset,然后使用 DataLoader 来加载数据并进行训练。 

二 .shape()的理解

三,矩阵转置 

import  torch
start =torch.tensor([[2,3,2],[2,1,4]])
print(start)
s11=start.transpose(0,1)
print(s11)#输出:
tensor([[2, 3, 2],[2, 1, 4]])
tensor([[2, 2],[3, 1],[2, 4]])

四 .squeeze()的作用

from torch.utils.data import  DataLoader
from  torch.utils.data import  Dataset
import  torch
start =torch.tensor([[[2,3,2],[2,1,4]]])
print(start.size())s12=start.squeeze(0)
print(s12.size())#.squeeze() 的作用
# .squeeze() 的主要作用是 移除长度为 1 的维度,而不是移除指定的维度。
# 
# 如果你不指定 dim,它会移除所有长度为 1 的维度。
# 如果你指定 dim,它只会检查该维度是否长度为 1,如果是,则移除;否则,不做任何操作。输出:
torch.Size([1, 2, 3])
torch.Size([2, 3])

五.矩阵的拼接:

六,梯度的理解 

import  torch
start =torch.tensor([[1.,0.],[-1.,1.]],requires_grad=True)
z = start.pow(2).sum()
z.backward()
print(start.grad)

 输出:

tensor([[ 2.,  0.],[-2.,  2.]])

 注意:只有标量才能求梯度

七.depplearning全流程理解 

八. model.eval()与model.train() 


model.eval() 是一个简单的开关,用于告诉你的神经网络模型:“现在处于评估或推理阶段,请关闭所有只在训练时使用的特殊机制(如 Dropout 和 BN 的训练更新),以便我得到稳定可靠的输出。” 这对于获得准确的模型性能评估和可靠的预测结果至关重要。通常在训练循环之外,或者在准备进行推理之前调用它。

model.eval()主要作用和影响包括:

  1. 关闭 Dropout:在训练模式下(默认),Dropout 会在神经元之间随机断开连接,以防止过拟合。但在评估或推理时,我们需要使用完整的网络结构,因此 model.eval() 会关闭 Dropout 层,确保所有神经元都参与计算。

  2. 关闭 Batch Normalization 的训练更新:Batch Normalization (BN) 层在训练时,会根据当前 mini-batch 的数据计算均值和方差,并使用这些统计量进行归一化,同时还会维护一个移动平均来估计整个数据集的全局均值和方差。在评估模式下,BN 层会停止使用当前 mini-batch 的统计量,而是使用之前训练过程中积累的全局均值和方差来进行归一化,以保证评估结果的一致性。

  3. 保持模型状态:它不会改变模型学习到的参数(权重和偏置),只是改变了模型中某些层(如 Dropout 和 BN)的行为方式。

九,训练模型的保存与加载

torch.save(model.state_dict(), path)
#这行代码将模型的参数字典(即模型中所有的可学习参数)保存到一个文件中。model.state_dict() 返回一个#包含模型参数的字典,torch.save 将这个字典序列化并保存到指定的路径 path。
ckpt = torch.load(path)
#这行代码从一个文件中加载之前保存的模型参数字典。torch.load 从指定的路径 path 加载一个字典,并将其#赋值给变量 ckpt。
model.load_state_dict(ckpt)
#这行代码将加载的参数字典 ckpt 加载回模型中。model.load_state_dict 将字典中的参数复制到模型的相应#参数中,使得模型恢复到保存时的状态。

十,super()的作用 

import torch.nn as nn
class Mymodel(nn.Module):def __init__(self):super(Mymodel,self).__init__()#super(Mymodel, self).__init__() 这行代码的作用是调用父类 nn.Module 的构造函数 __init__#等价于 nn.Module.__init__(self)

十一,矩阵运算到模型预算(神图!!!)

十二,激活函数softmax() 在输出层的应用及其原理

分类问题中,在输出层(如图)我们一般都会加上softmax()激活函数,为什么呢?

首先讲softmax()的函数知识:
 

因为隐藏层的激活函数会得到一个向量,该向量有可能会大于1,而我们输出层一般都是希望得到概率值小于1,所以基于softmax()特性加上softmax() 函数。
ps:sigmod函数适用于二分类,softmax函数适用于多酚类。



今天学到这啦

谢谢大家O(∩_∩)O哈哈~

 

http://www.dtcms.com/a/272564.html

相关文章:

  • 数据库复合索引设计:为什么等值查询列应该放在范围查询列前面?
  • 区间动态规划详解
  • 【JMeter】跨线程组传递参数
  • 在Docker中运行macOS的超方便体验!
  • SpringAI×Ollama:Java生态无缝集成本地大模型实践指南
  • Redis数据库基础概述
  • 8.2.3希尔排序
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • KV Cache原理详解 + 代码理解
  • 从零实现一个GPT 【React + Express】--- 【2】实现对话流和停止生成
  • Pytest之收集用例规则与运行指定用例
  • 外贸网站模板 网页设计模板网站
  • WinUI3入门17:本地文件存储LocalApplicationData在哪里
  • 【佳易王桌球棋牌计时计费软件】:从功能到实操的全方位解析,灯控器适配、会员管理多场景,软件程序操作教程详解
  • BatchNorm解决梯度消失/爆炸
  • van-tabs 自定义
  • 08-自然壁纸实战教程-视频列表-云
  • softmax公式推导
  • 深度学习中的批处理vs小批量训练
  • 大数据时代UI前端的智能化升级:基于机器学习的用户意图预测
  • MyBatis-Plus的LambdaQuery用法
  • 【音视频】HTTP协议介绍
  • 钉钉拿飞书当靶
  • 测试开发和后端开发到底怎么选?
  • 打破技术债困境:从“保持现状”到成为变革的推动者
  • VILA-M3: Enhancing Vision-Language Models with Medical Expert Knowledge
  • AI大模型平台
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_keepalive_time
  • 在虚拟机中安装Linux系统
  • EasyCVR视频汇聚平台国标接入设备TCP主动播放失败排查指南