b站小土堆pytorch学习记录—— P18-P22 神经网络+小实战

文章目录

  • 一、卷积层 P18
    • 1.卷积操作
    • 2.代码
  • 二、池化层 P19
    • 1.池化层简单介绍
    • 2.代码
      • (1)池化操作中数字的变化
      • (2)池化操作对图片的影响
  • 三、非线性激活 P20
    • 1.简要介绍
    • 2.代码
  • 四、线性层及其他层介绍 P21
    • 1.线性层
    • 2.代码
  • 五、搭建小实战和Sequential的使用 P22
    • 1.要实现的模型
    • 2.代码

理解神经网络:

卷积神经网络(CNN)详细介绍及其原理详解

CNN笔记:通俗理解卷积神经网络

一文让你彻底了解卷积神经网络

一、卷积层 P18

1.卷积操作

推荐几个高赞博客:

卷积最容易理解的解释
卷积神经网络(CNN)详细介绍及其原理详解
还有pytorch官网的动态图:
pytorch卷积

具体而言,假设有一个3X3的灰度图像矩阵:

[1, 1, 1]
[0, 0, 0]
[1, 1, 1]

我们使用一个称为边缘检测的卷积核(滤波器):

[-1, -1, -1]
[-1,  8, -1]
[-1, -1, -1]

接下来,我们将对这个3x3图像矩阵应用卷积操作。

步骤如下:

(1)将3x3的卷积核与图像的左上角3x3区域进行逐元素相乘,并将结果相加,得到新的像素值。
(2)滑动卷积核到下一个位置,再次进行相乘相加操作,得到另一个像素值。
(3)重复此过程直到覆盖整个图像。
应用以上步骤后,我们可以得到一个新的图像矩阵,其中包含了经过边缘检测卷积核处理后的结果。这种操作有助于检测图像中的边缘和轮廓。

具体计算如下:

第一步,将卷积核与图像的左上角3x3区域进行逐元素相乘,并将结果相加,得到新的像素值:

1*(-1) + 1*(-1) + 1*(-1) +
0*(-1) + 0*8 + 0*(-1) +
1*(-1) + 1*(-1) + 1*(-1) = -3

第二步,滑动卷积核到下一个位置,再次进行相乘相加操作,得到另一个像素值:

1*(-1) + 1*(-1) + 0*(-1) +
0*(-1) + 0*8 + 1*(-1) +
1*(-1) + 1*(-1) + 0*(-1) = -5

以此类推,重复步骤直到覆盖整个图像。在这个例子中,我们得到了一个2x2的新图像矩阵,其像素值为-3和-5。

所以,经过边缘检测卷积核处理后的结果是:

[-3, -5]
[ 0,  0]

2.代码

import torch
import torchvision
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 下载CIFAR10数据集并准备数据加载器
dataset = torchvision.datasets.CIFAR10("./dataset2", train=False, transform=torchvision.transforms.ToTensor(), download=True)
dataloader = DataLoader(dataset, batch_size=64)# 定义一个简单的神经网络模型
class Guodong(nn.Module):def __init__(self):super(Guodong, self).__init__()# 定义一个卷积层self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)def forward(self, x):x = self.conv1(x)return xguodong = Guodong()
print(guodong)# 初始化TensorBoard的SummaryWriter
writer = SummaryWriter("logs")
step = 0# 遍历数据加载器,处理数据并将结果写入TensorBoard
for data in dataloader:imgs, target = dataprint(imgs.shape)  # 打印输入图片的形状output = guodong(imgs)  # 将输入图片传入神经网络模型得到输出print(output.shape)  # 打印输出的形状writer.add_images("input", imgs, step)  # 将输入图片写入TensorBoardoutput = torch.reshape(output, (-1, 3, 30, 30))  # 调整输出的形状以便写入TensorBoardwriter.add_images("output", output, step)  # 将输出图片写入TensorBoardstep = step + 1  # 更新步数

程序运行结果:

在这里插入图片描述

打开tensorboard后,结果如下:

在这里插入图片描述

二、池化层 P19

1.池化层简单介绍

池化层详细介绍

池化层(Pooling Layer)是深度学习中常用的一种层,通常用于减少特征图的空间尺寸,降低计算复杂度,并且有助于防止过拟合。池化层在卷积神经网络(CNN)中被广泛应用。

池化层的作用是通过对输入数据进行池化操作来减少特征图的尺寸,从而减少网络参数和计算量。池化操作通常在每个独立的特征图上进行,它使用一个固定大小的窗口在特征图上滑动,并在窗口内部执行一个汇聚运算(如最大池化、平均池化等)来得到一个汇聚后的值作为输出。

常见的池化操作:

最大池化(Max Pooling):在池化窗口内取最大值作为汇聚后的值。
平均池化(Average Pooling):在池化窗口内取平均值作为汇聚后的值。
全局平均池化(Global Average Pooling):对整个特征图进行平均池化,将每个通道的特征图转换为一个标量值。

池化层的主要优点:

减少特征图的维度,降低计算复杂度。
增加平移不变性,提高模型的鲁棒性。
减少过拟合,通过减少特征图维度,可以减少模型参数的数量。

2.代码

(1)池化操作中数字的变化

import torch
from torch import nn
from torch.nn import MaxPool2d# 创建输入张量
input = torch.tensor([[1, 2, 0, 3, 1],[0, 1, 2, 3, 1],[1, 2, 1, 0, 0],[5, 2, 3, 1, 1],[2, 1, 0, 1, 1]], dtype=torch.float32)# 将输入张量reshape为(batch_size, channels, height, width)
input = torch.reshape(input, (-1, 1, 5, 5))# 定义第一个神经网络模型Guodong1,使用MaxPool2d进行最大池化操作,ceil_mode=True
class Guodong1(nn.Module):def __init__(self):super(Guodong1, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)  # 定义最大池化层,kernel_size为3,启用ceil_modedef forward(self, input):output = self.maxpool1(input)return output# 创建Guodong1模型实例并进行前向传播
guodong1 = Guodong1()
output1 = guodong1(input)
print("Output of Guodong1 with ceil_mode=True:")
print(output1)# 定义第二个神经网络模型Guodong2,使用MaxPool2d进行最大池化操作,ceil_mode=False
class Guodong2(nn.Module):def __init__(self):super(Guodong2, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False)  # 定义最大池化层,kernel_size为3,不启用ceil_modedef forward(self, input):output = self.maxpool1(input)return output# 创建Guodong2模型实例并进行前向传播
guodong2 = Guodong2()
output2 = guodong2(input)
print("\nOutput of Guodong2 with ceil_mode=False:")
print(output2)

运行结果:

在这里插入图片描述

(2)池化操作对图片的影响

from torch import nn
import torchvision
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 加载CIFAR10数据集
dataset = torchvision.datasets.CIFAR10("./dataset1", train=False, transform=torchvision.transforms.ToTensor(), download=True)# 创建数据加载器
dataloader = DataLoader(dataset, batch_size=64)# 定义神经网络模型Guodong,使用MaxPool2d进行最大池化操作,ceil_mode=True
class Guodong(nn.Module):def __init__(self):super(Guodong, self).__init__()self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=True)  # 定义最大池化层,kernel_size为3,启用ceil_modedef forward(self, input):output = self.maxpool1(input)return outputguodong = Guodong()# 创建TensorBoard的SummaryWriter实例
writer = SummaryWriter("./logs_maxpool")
step = 0# 遍历数据加载器,将输入图像和模型输出图像添加到TensorBoard中
for data in dataloader:imgs, target = datawriter.add_images("input", imgs, step)  # 将输入图像添加到TensorBoardoutput = guodong(imgs)  # 通过模型前向传播得到输出writer.add_images("output", output, step)  # 将模型输出的图像添加到TensorBoardstep = step + 1writer.close()  # 关闭SummaryWriter

运行结果:

在这里插入图片描述
可以看到,最后的结果就像给图片打了 “马赛克”

三、非线性激活 P20

1.简要介绍

非线性激活函数是神经网络中用于引入非线性特性的函数。在神经网络中,每个神经元除了具有权重和偏置之外,还需要一个激活函数来引入非线性变换,从而使神经网络能够学习复杂的模式和关系。

在深度学习中,使用非线性激活函数的主要原因是为了让神经网络具备学习和表示更加复杂的函数的能力,从而提高模型的表达能力。如果没有非线性激活函数,多层神经网络就会退化为单层网络,无法表达复杂的非线性关系,限制了神经网络的表达能力和学习能力。

常见的非线性激活函数:

ReLU(Rectified Linear Unit):ReLU函数定义为f(x) = max(0, x),即将小于等于0的输入映射为0,大于0的输入保持不变。ReLU函数简单且计算高效,在实际应用中被广泛使用。

Sigmoid函数:Sigmoid函数定义为f(x) = 1 / (1 + exp(-x)),它将输入值映射到一个取值范围在[0, 1]之间的输出。Sigmoid函数常用于二分类问题或者需要将输出限制在一定范围内的任务。

Tanh函数:Tanh函数定义为f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)),它将输入值映射到一个取值范围在[-1, 1]之间的输出。Tanh函数在某些情况下比Sigmoid函数更适合使用,尤其是在中心化数据和对称性数据上。

Leaky ReLU:Leaky ReLU函数是对ReLU函数的改进,当输入小于0时,引入一个小的斜率来避免神经元“死亡”的问题。Leaky ReLU函数定义为f(x) = max(ax, x),其中a是一个小的正数。

ELU(Exponential Linear Unit):ELU函数在负数区域对输入进行指数级衰减,而在正数区域保持线性增长。ELU函数定义为f(x) = max(ax, x)(x >= 0)和f(x) = a * (exp(x) - 1)(x < 0),其中a是一个小的正数。

Softmax函数:Softmax函数常用于多分类问题中,将一组实数值映射到概率分布上,使得所有输出的总和等于1。Softmax函数定义为f(x_i) = exp(x_i) / sum(exp(x_j))。

2.代码

import torch
import torchvision
from torch import nn
from torch.nn import ReLU, Sigmoid
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter# 创建输入张量并reshape为(batch_size, channels, height, width)
input = torch.tensor([[1, 0.5],[-1, 3]])
input = torch.reshape(input, (-1, 1, 2, 2))
print(input.shape)# 加载CIFAR10数据集
dataset = torchvision.datasets.CIFAR10("./dataset1", train=False, download=True, transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset, batch_size=64)# 定义神经网络模型Guodong,包含ReLU和Sigmoid激活函数
class Guodong(nn.Module):def __init__(self):super(Guodong, self).__init__()self.relu1 = ReLU()  # 定义ReLU激活函数self.sigmoid1 = Sigmoid()  # 定义Sigmoid激活函数def forward(self, input):output = self.sigmoid1(input)  # 将输入数据经过Sigmoid激活函数得到输出return outputguodong = Guodong()
output = guodong(input)
print(output)# 使用SummaryWriter创建TensorBoard日志
step = 0
writer = SummaryWriter("logs")
for data in dataloader:imgs, target = datawriter.add_images("input", imgs, step)  # 将输入图像添加到TensorBoardoutput = guodong(imgs)  # 通过模型前向传播得到输出writer.add_images("output", output, step)  # 将模型输出的图像添加到TensorBoardstep += 1writer.close()  # 关闭SummaryWriter

代码运行结果:

在这里插入图片描述

四、线性层及其他层介绍 P21

1.线性层

在这里插入图片描述

2.代码

import torch
import torchvision
from torch import nn
from torch.nn import Linear
from torch.utils.data import DataLoader# 下载并加载 CIFAR10 数据集
dataset = torchvision.datasets.CIFAR10("./dataset1", train=False, transform=torchvision.transforms.ToTensor(), download=True)# 创建数据加载器
dataloader = DataLoader(dataset, batch_size=64)# 定义自定义模型 Guodong
class Guodong(nn.Module):def __init__(self):super(Guodong, self).__init__()self.linear1 = Linear(196608, 10)  # 线性层,将输入维度为 196608 转换为输出维度为 10def forward(self, input):output = self.linear1(input)return output# 创建 Guodong 模型的实例
guodong = Guodong()# 遍历数据加载器
for data in dataloader:imgs, target = data# 打印图像张量的形状print(imgs.shape)# 将图像展平为一维向量output = torch.flatten(imgs)print(output.shape)# 将展平后的向量输入到 Guodong 模型中进行前向传播output = guodong(output)print(output.shape)

五、搭建小实战和Sequential的使用 P22

1.要实现的模型

CIFAR10 结构:
在这里插入图片描述

2.代码

import torch
from torch import nn
from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential
from torch.utils.tensorboard import SummaryWriterclass Guodong(nn.Module):def __init__(self):super(Guodong,self).__init__()self.module1 = Sequential(Conv2d(3, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 32, 5, padding=2),MaxPool2d(2),Conv2d(32, 64, 5, padding=2),MaxPool2d(2),Flatten(),Linear(1024, 64),Linear(64, 10))def forward(self,input):output = self.module1(input)return outputguodong = Guodong()input = torch.ones((64, 3, 32, 32))
print(input.shape)
output = guodong(input)
print(output.shape)writer = SummaryWriter("../seq_logs")
writer.add_graph(guodong, input)writer.close()

个人运行在tensorboard中显示异常,如下图,目前还不知道具体原因。
如果有大佬知道,可以在评论区指导

pytorch打不开

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

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

相关文章

Conda快速安装的解决方法(Mamba安装)

如果你的Conda安装了&#xff0c;你可能会发现一个问题&#xff0c;就是使用Conda install 安装某个软件时&#xff0c;会特别慢&#xff0c;这时候呢&#xff1f;你会上网去搜&#xff0c;然后大家解决的方法呢。一是告诉你镜像可以下载快一点&#xff0c;二是&#xff0c;Mam…

基于逻辑回归实现乳腺癌预测(机械学习与大数据)

基于逻辑回归实现乳腺癌预测 将乳腺癌数据集拆分成训练集和测试集&#xff0c;搭建一个逻辑回归模型&#xff0c;对训练集进行训练&#xff0c;然后分别对训练集和测试集进行预测。输出以下结果&#xff1a; 该模型在训练集上的准确率&#xff0c;在测试集上的准确率、召回率和…

hyperf 二十五 数据迁移 一

教程&#xff1a;Hyperf 版本说明 一 生成迁移 php bin/hyperf.php gen:migration create_users_table 执行文件&#xff1a;Hyperf\Database\Commands\Migrations\GenMigrateCommand 功能&#xff1a;创建迁移文件 参数&#xff1a; name 文件名称 选项&#xff1a; c…

Rust 安装与版本更新

Rust 简介 Rust &#xff0c;一门赋予每个人构建可靠且高效软件能力的语言&#xff0c;主打内存安全。 2024年2月&#xff0c;在一份 19 页的报告《回归基础构件&#xff1a;通往安全软件之路》中&#xff0c;白宫国家网络主任办公室&#xff08;ONCD&#xff09;呼吁开发者使…

NoSQL--3.MongoDB配置(Linux版)

目录 2.2 Linux环境下操作 2.2.1 传输MongoDB压缩包到虚拟机&#xff1a; 2.2.2 启动MongoDB服务&#xff1a; 2.2 Linux环境下操作 2.2.1 传输MongoDB压缩包到虚拟机&#xff1a; &#xff08;笔者使用XShell传输&#xff09; 如果不想放在如图的路径&#xff0c;删除操作…

Appium系列(1)安装启动Appium

Appium环境准备 Mac电脑jdk环境AndroidSDK环境node>8.1.0&#xff08;最好用最新版本&#xff09; 安装命令 npm i -g appium安装不成功请检查node 版本是否正确 安装成功命令行输入appium回车查看 安装驱动程序 1、先检查当前驱动情况 通过 appium driver list 进行…

RK356X RK3588 单独编译kernel 与烧录

RK356X RK3588 单独编译kernel 与烧录 可以快速提高我们开发与调试速度 网上可查到的方法如下&#xff1a; RK3568 Android12&#xff1a; 1.添加kernel-4.19/makekernel.sh #!/bin/sh make -j24 ARCHarm64 CC../prebuilts/clang/host/linux-x86/clang-r416183b/bin/clang …

RF接口测试(1)

RF是做接口测试的一个非常方便的工具&#xff0c;我们只需要写好发送报文的脚本&#xff0c;就可以灵活的对接口进行测试。 做接口测试我们需要做如下工作&#xff1a; 1、拼接发送的报文 2、发送请求的方法 3、对结果进行判断 我们先按步骤实现&#xff0c;再进行RF操作的…

比较 2 名无人机驾驶员:借助分析飞得更高

近年来&#xff0c;越来越多的政府和执法机构使用无人机从空中鸟瞰。为了高效执行任务&#xff0c;无人机必须能够快速机动到预定目标。快速机动使它们能够在复杂的环境中航行&#xff0c;并高效地完成任务。成为认证的无人机驾驶员的要求因国家/地区而异&#xff0c;但都要求您…

有一点好看的wordpress外贸独立站模板

手机配件wordpress外贸网站模板 充电器、移动电源、手机膜、手机电池、手机壳、手机转接头等手机配件wordpress外贸网站模板。 https://www.jianzhanpress.com/?p3809 车载电器wordpress外贸网站模板 车载吸尘器、空气净化器、行车记录仪、车载充电器、车载影音导航等车载电…

网络原理TCP_IP

文章目录 应用层自定义协议 传输层udp协议TCP协议1.确认应答2.超时重传3.连接管理建立连接, 三次握手断开连接, 四次挥手tcp的状态 4.滑动窗口5.流量控制6.拥塞控制7.延时应答8.携带应答9.面向字节流10.异常情况 网络层IP协议地址管理路由选择 数据链路层以太网 应用层 自定义…

以创新筑牢安全盾牌,广师大隐盾科技照亮软件知识产权保护之路

“很感谢隐盾科技团队的各位成员对我司计算机软件代码保护的鼎力相助……”广州市硬科技百强企业在给予隐盾科技团队的感谢信中写道。据了解&#xff0c;该公司在使用了隐盾科技团队研发的隐盾代码虚拟化系统后&#xff0c;企业开发盗版率从45%降至0%、保护该企业年侵权成本超过…

redis5种数据类型应用场景

Redis提供了以下五种基本数据类型及其应用场景&#xff1a; 1 , String&#xff08;字符串&#xff09;&#xff1a; 适用场景&#xff1a;用于存储统计网站访问数量、当前在线人数等信息。此外&#xff0c;它也适用于存#### 储JPG图片或者序列化的对象。 2 , Hash&#xff08…

预约自习室

预约自习室 1、技术介绍 自习室预约系统的后端开发语言采用Node&#xff0c;后端开发框架采用Express&#xff0c;数据库采用的Node的最佳搭档MySQL。采用Vue作为前端开发框架&#xff0c;Element-UI作为开发的组件库&#xff0c;微信小程序。期间采用axios实现网页数据获取&a…

精细调度:Apache DolphinScheduler脚本深度解析

在现代数据处理和工作流管理中&#xff0c;Apache DolphinScheduler以其灵活性和强大的调度能力受到开发者的广泛欢迎。 本文将逐步解析DolphinScheduler的关键脚本&#xff0c;希望能提供一个详尽的操作指南&#xff0c;帮助大家掌握安装、配置和操作的每一步。 建立在./bin/e…

精品中国货出海wordpress外贸独立站建站模板

旗袍唐装wordpress外贸网站模板 旗袍、唐装、华服wordpress外贸网站模板&#xff0c;适合做衣服生意的外贸公司官网使用。 https://www.jianzhanpress.com/?p3695 劳动防护wordpress外贸独立站模板 劳动防护wordpress外贸独立站模板&#xff0c;劳动保护、劳动防护用品外贸…

数字创新的风口:创业者如何在Web3时代抢占先机

随着区块链技术的不断发展&#xff0c;Web3正成为数字创新的新风口&#xff0c;为创业者们带来了前所未有的机遇和挑战。本文将从另一个角度探讨Web3对创业者的影响&#xff0c;并提出创业者在Web3时代抢占先机的策略和方法。 1. Web3重新定义了商业模式 Web3不仅仅是一种技术…

无人机生态环境监测、图像处理与GIS数据分析

构建“天空地”一体化监测体系是新形势下生态、环境、水文、农业、林业、气象等资源环境领域的重大需求&#xff0c;无人机生态环境监测在一体化监测体系中扮演着极其重要的角色。通过无人机航空遥感技术可以实现对地表空间要素的立体观测&#xff0c;获取丰富多样的地理空间数…

app逆向-ratel框架-AES,DES,MD5,SHA1加密算法java hook程序

一、前言 AES&#xff08;高级加密标准&#xff09;、DES&#xff08;数据加密标准&#xff09;、MD5&#xff08;消息摘要算法5&#xff09;和SHA-1&#xff08;安全哈希算法1&#xff09;都是常见的加密算法&#xff0c;用于数据加密和哈希计算。 二、加密算法实现 1、创建…

Linux第71步_将linux中的多个文件编译成一个驱动模块

学习目的&#xff1a;采用旧字符设备测试linux系统点灯&#xff0c;进一步熟悉其设计原理。采用多文件参与编译&#xff0c;深度学习编写Makefile&#xff0c;有利于实现驱动模块化设计。 1、创建MyOldLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home…