torch深度学习(transforms、torchvision、数据、nn.Module、卷积、池化、线性与非线性)

目录

PyTorch 的基本组件:

加载数据

TensorBoard 的使用

Transforms 的使用

定义 Transforms

在 Dataset 中使用 Transforms

自定义 Transforms

常见的transforms方法

torchvision中的数据集使用

DataLoad的使用

神经网络的基本骨架-nn.Module的使用

基本步骤

卷积操作

神经网络-卷积层

最大池化(Max Pooling)

最大池化的参数

非线性激活函数

一、非线性激活函数的作用

二、常见的非线性激活函数

 线性层(Linear Layer)


代码在我的资源里或者通过迅雷看分享文件:深度学习
链接:https://pan.xunlei.com/s/VO3QcnPu5-YT5myVAbC6RAKMA1?pwd=dy8f#
复制这段内容后打开手机迅雷App,查看更方便

先了解他的基本组件:

PyTorch 的基本组件:

  • 张量(Tensor):核心数据结构,类似于NumPy的ndarray,它可以在GPU上运行以加速计算。

  • 自动求导(Autograd):自动求导系统可以自动计算张量操作的梯度,这对于训练神经网络至关重要。

  • 神经网络模块(nn.Module):继承 nn.Module 并定义前向传播来构建的。通过组合不同的层(如卷积层、全连接层等)来构建复杂的网络。

  • 优化器(Optimizer):提供多种优化算法(如SGD、Adam等),用于在训练过程中更新网络的权重。

  • 数据加载(DataLoader):提供了一个可迭代的对象,用于批量加载数据。

加载数据

torch.utils.data.DataLoader类,它可以封装任何给定的Dataset对象。

Dataset是一个抽象类,表示一个数据集。

通过继承这个类并实现两个主要方法(__len____getitem__)来创建自己的数据集。

  • __len__方法应该返回数据集中的样本数。
  • __getitem__方法应该支持索引,并返回单个样本。对于图像,这通常是一个图像张量和一个标签。

代码案例:略(在我的文件分享里有)

插入:内置的数据集类torchvision.datasets.CIFAR10已经实现了Dataset接口,可以直接使用。后面会用到说明。

TensorBoard 的使用

TensorBoard 是 一个可视化工具,可视化模型训练过程中的各种指标,查看训练数据。

SummaryWriter 类来记录数据。(保存位置)

启动:tensorboard --logdir=runs --port=6007(任意数)端口数

Transforms 的使用

用于在数据加载到模型之前对数据进行预处理。transforms 包含了各种图像处理操作,如裁剪、缩放、归一化等。

定义 Transforms
transform = transforms.Compose([
transforms.Resize((224, 224)), # 缩放图像到 224x224
transforms.ToTensor(), # 将 PIL Image 或 numpy.ndarray 转换为 torch.Tensor
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), # 归一化
])
在 Dataset 中使用 Transforms

使用 torchvision.datasets.CIFAR10 时,可以直接传递 transform 参数。

from torchvision import datasets
# 加载 CIFAR10 数据集,并应用上面定义的 transforms
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
自定义 Transforms

你也可以通过继承 torchvision.transforms.transforms.Transform 类来创建自定义的 transforms。

常见的transforms方法

transforms模块中的常见方法包括但不限于:

  1. 裁剪
    • RandomCrop:随机裁剪图像。
  2. 翻转和旋转
    • RandomRotation:随机旋转图像。
  3. 图像变换
    • Resize:调整图像大小。
    • Normalize:用均值和标准差归一化图像。
    • ToTensor:将PIL图像或Numpy数组转换为Tensor,并将像素值从[0, 255]缩放到[0.0, 1.0]。
  4. 组合变换
    • Compose:将多个变换组合在一起,按顺序对图像进行预处理。

代码案例:略(在我的文件里有)

torchvision中的数据集使用

使用加载器时,通常可以指定数据集的路径、是否用于训练、转换操作等。

加载CIFAR10数据集的示例:

代码案例:略(在我的文件里有)

DataLoad的使用

DataLoader是一个迭代器,它封装了Dataset,并提供了一个简单的API来批量加载数据。

代码案例:略(在我的文件里有)

参数介绍:

  1. dataset (test_data): 这是一个 Dataset 对象,它代表了你想要加载的数据集。test_data 就是你想要加载并用于测试的数据集。

  2. batch_size (64): 这个参数指定了每个批次(batch)应该包含的样本数。

  3. shuffle (False): 这个参数控制是否在每个epoch开始时打乱数据。设置为 True 时,数据在每个epoch开始时会被随机打乱。

  4. num_workers (0): 这个参数指定了用于数据加载的子进程数。设置为0意味着数据将在主进程中加载。

  5. drop_last (False): 这个参数决定了是否丢弃最后一个不完整的批次。 True,丢弃;False,保留。

神经网络的基本骨架-nn.Module的使用

在PyTorch中,nn.Module是所有神经网络模块的基类,它为神经网络提供了一个基本的骨架。通过继承nn.Module并定义自己的神经网络层,可以构建出各种复杂的神经网络模型。

基本步骤

  1. 定义神经网络类
    继承nn.Module,并在类中定义网络层。

    class Net(nn.Module):
        def __init__(self):
            super(Net, self).__init__()
    
        def forward(self, input):
            output = input+1
            return output
  2. 实例化网络并训练

    net = Net()
    
    x = torch.tensor(1.0)
    
    output = net(x)
    print(output)

卷积操作

在深度学习中,特别是在卷积神经网络(CNN)中,卷积操作主要用于图像处理领域,用于提取图像中的特征。

代码案例:略(在我的文件里有)

参数介绍:

  1. input:输入数据,通常是一个四维张量(Tensor),形状为(N, C_, H, W)N是批量大小(batch size),C是通道数,H是高度,W是宽度。

  2. weightkernel):卷积核,是一个四维张量,形状为(out_channels, C/groups, kH, kW)out_channels是输出通道数,C/groups是每个卷积核的输入通道数(如果使用了分组卷积,则为每个组的输入通道数),kHkW分别是卷积核的高度和宽度。

  3. bias=None:每个输出通道的可选偏置项。如果提供了偏置项,它应该是一个一维张量,形状为(out_channels,)。在默认情况下,不添加偏置项(即bias=None)。

  4. dilation=1:卷积核元素之间的间距。

  5. groups=1:控制输入和输出之间的连接。groups参数将输入和输出通道分成groups个组,并且每个组的输入通道仅与对应组的输出通道连接。这可以用于实现分组卷积,其中每个输入通道组仅与对应的输出通道组进行卷积。

神经网络-卷积层

卷积层是卷积神经网络(CNN)中的核心组件,它通过卷积运算对输入数据进行特征提取。

代码案例:略(在我的文件里有)

参数介绍:

Conv2d是二维卷积层的一个类

  1. in_channels=3:指定了输入数据的通道数。

  2. out_channels=6:指定了卷积层输出的通道数,也就是卷积层将会使用多少个卷积核。

  3. kernel_size=3:定义了卷积核的大小。

  4. stride=1:这个参数指定了卷积核在特征图上滑动的步长。

  5. padding=0:这个参数指定了在输入数据的周围需要填充多少层零(或其他值)。

最大池化(Max Pooling)

是一种常用的下采样技术,主要用于减少数据,保留重要特征,减少计算量,并有助于防止过拟合。

最大池化的参数

通过MaxPool2d等函数实现,其主要参数包括:

  • kernel_size:池化核的大小。
  • stride:池化核的步长,即池化核在输入特征图上移动的距离。默认值为kernel_size,即池化核每次移动与自身大小相同的距离。
  • padding:在输入特征图的边界上填充的零的层数。
  • dilation:空洞卷积的参数,用于控制池化核内元素之间的距离。
  • ceil_mode:当设置为True时,输出特征图的大小将使用向上取整的方式计算,否则使用向下取整。

代码案例:略(在我的文件里有)

非线性激活函数

一、非线性激活函数的作用

没有激活函数的神经网络实际上是线性可加的,那么多线性层其实可以归为一层。只具有线性的神经网络表达能力极其有限。

提高泛化能力

(我的理解)激活以后直线就变弯了,很多弯曲的线可以拟合十分复杂的曲线。不激活的话,再多直线变来变去还是直线,还是只有原来那点能力

二、常见的非线性激活函数
  1. ReLU
    • 公式:f(x) = max(0, x)
    • 特点:当输入为正数时,输出等于输入;当输入为负数时,输出为0。
  2. Sigmoid
    • 公式:f(x) = 1 / (1 + e^(-x))
    • 特点:Sigmoid函数将输入映射到(0, 1)区间内,这使得它非常适合用于二分类问题的输出层。

当图像三个通道的取值都是0-255,用relu等于没有变化,用sigmoid才能映射到0-1的区间。

 线性层(Linear Layer)

线性层(全连接层)它的主要作用是对输入数据进行线性变换,即通过矩阵乘法和加上偏置来实现。

线性层在神经网络中的位置比较灵活,既可以作为输入层与隐藏层之间的连接,也可以作为隐藏层与输出层之间的连接。

代码案例:略(在我的文件里有)

参数介绍:

  1. 输入特征数 (in_features=196608):这是该层期望的输入张量的最后一个维度的大小。在这个例子中,它期望输入张量的形状类似于 [batch_size, 196608],其中 batch_size 是批量中样本的数量,而 196608 是每个样本的特征数。

  2. 输出特征数 (out_features=10):这是该层输出的特征数,也是输出张量最后一个维度的大小。 10 对应于输出的特征数。

  3. 线性层工作:  它接受一个输入张量 x{形状为 [batch_size, in_features]},通过矩阵乘法和加上偏置 bias 来计算输出          {输出的形状将是 [batch_size, out_features]}

常见的其他层:Recurrent Layer(循环层)、Transformer Layer、Spare Layer(稀疏层)、输入层(Input Layer)、隐藏层(Hidden Layer)、卷积层(Convolutional Layer)、池化层(Pooling Layer)、输出层(Output Layer)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值