wordpress如何设置css样式表/百度手机端排名如何优化

wordpress如何设置css样式表,百度手机端排名如何优化,建设网站的成本有哪些,网站怎么做数据转移图像分类是计算机视觉领域的一项基本任务,也是深度学习技术的一个常见应用。近年来,卷积神经网络(cnn)和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。 理解卷积神经网络(cnn) 卷…

图像分类是计算机视觉领域的一项基本任务,也是深度学习技术的一个常见应用。近年来,卷积神经网络(cnn)和PyTorch库的结合由于其易用性和鲁棒性已经成为执行图像分类的流行选择。

理解卷积神经网络(cnn)

卷积神经网络是一类深度神经网络,对分析视觉图像特别有效。他们利用多层构建一个可以直接从图像中识别模式的模型。这些模型对于图像识别和分类等任务特别有用,因为它们不需要手动提取特征。

cnn的关键组成部分

  • 卷积层:这些层对输入应用卷积操作,将结果传递给下一层。每个过滤器(或核)可以捕获不同的特征,如边缘、角或其他模式。
  • 池化层:这些层减少了表示的空间大小,以减少参数的数量并加快计算速度。池化层简化了后续层的处理。
  • 完全连接层:在这些层中,神经元与前一层的所有激活具有完全连接,就像传统的神经网络一样。它们有助于对前一层识别的对象进行分类。
    在这里插入图片描述

使用PyTorch进行图像分类

PyTorch是开源的深度学习库,提供了极大的灵活性和多功能性。研究人员和从业人员广泛使用它来轻松有效地实现尖端的机器学习模型。

设置PyTorch

首先,确保在开发环境中安装了PyTorch。你可以通过pip安装它:

pip install torch torchvision

用PyTorch创建简单的CNN示例

下面是如何定义简单的CNN来使用PyTorch对图像进行分类的示例。

import torch
import torch.nn as nn
import torch.nn.functional as F# 定义CNN模型(修复了变量引用问题)
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 6, 5)      # 第一个卷积层:3输入通道,6输出通道,5x5卷积核self.pool = nn.MaxPool2d(2, 2)        # 最大池化层:2x2窗口,步长2self.conv2 = nn.Conv2d(6, 16, 5)     # 第二个卷积层:6输入通道,16输出通道,5x5卷积核self.fc1 = nn.Linear(16 * 5 * 5, 120)# 全连接层1:400输入 -> 120输出self.fc2 = nn.Linear(120, 84)      # 全连接层2:120输入 -> 84输出self.fc3 = nn.Linear(84, 10)       # 输出层:84输入 -> 10类 logitsdef forward(self, x):# 输入形状:[batch_size, 3, 32, 32]x = self.pool(F.relu(self.conv1(x)))  # -> [batch, 6, 14, 14](池化后尺寸减半)x = self.pool(F.relu(self.conv2(x)))  # -> [batch, 16, 5, 5] x = x.view(-1, 16 * 5 * 5)            # 展平为一维向量:16 * 5 * 5=400x = F.relu(self.fc1(x))             # -> [batch, 120]x = F.relu(self.fc2(x))             # -> [batch, 84]x = self.fc3(x)                     # -> [batch, 10](未应用softmax,配合CrossEntropyLoss使用)return x

这个特殊的网络接受一个输入图像,通过两组卷积和池化层,然后是三个完全连接的层。根据数据集的复杂性和大小调整网络的架构和超参数。

模型定义

  • SimpleCNN 继承自 nn.Module
  • 使用两个卷积层提取特征,三个全连接层进行分类
  • 最终输出未应用 softmax,而是直接输出 logits(与 CrossEntropyLoss 配合使用)

训练网络

对于训练,你需要一个数据集。PyTorch通过torchvision包提供了用于数据加载和预处理的实用程序。

import torchvision.transforms as transforms
import torchvision
from torch.utils.data import DataLoader# 初始化模型、损失函数和优化器
net = SimpleCNN()               # 实例化模型
criterion = nn.CrossEntropyLoss()  # 使用交叉熵损失函数(自动处理softmax)
optimizer = torch.optim.SGD(net.parameters(), lr=0.001,      # 学习率momentum=0.9)   # 动量参数# 数据预处理和加载
transform = transforms.Compose([transforms.ToTensor(),          transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 加载CIFAR-10训练集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True,  # 自动下载数据集transform=transform
)trainloader = DataLoader(trainset, batch_size=4,   # 每个batch包含4张图像shuffle=True)  # 打乱数据顺序

模型配置

  • 损失函数CrossEntropyLoss(自动包含 softmax 和 log_softmax)
  • 优化器:SGD with momentum,学习率 0.001

数据加载

  • 使用 torchvision.datasets.CIFAR10 加载数据集

  • batch_size:4(根据 GPU 内存调整,CIFAR-10 建议 batch size ≥ 32)

  • transforms.Compose 定义数据预处理流程:

    • ToTensor():将图像转换为 PyTorch Tensor
    • Normalize():标准化图像像素值到 [-1, 1]

加载数据后,训练过程包括通过数据集进行多次迭代,使用反向传播和合适的损失函数:

# 训练循环
for epoch in range(2):  # 进行2个epoch的训练running_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = data# 前向传播outputs = net(inputs)loss = criterion(outputs, labels)# 反向传播和优化optimizer.zero_grad()   # 清空梯度loss.backward()         # 计算梯度optimizer.step()       # 更新参数running_loss += loss.item()# 每2000个batch打印一次if i % 2000 == 1999:avg_loss = running_loss / 2000print(f'Epoch [{epoch+1}/{2}], Batch [{i+1}/2000], Loss: {avg_loss:.3f}')running_loss = 0.0print("训练完成!")

训练循环

  • epoch:完整遍历数据集一次
  • batch:数据加载器中的一个批次
  • 梯度清零:每次反向传播前需要清空梯度
  • 损失计算outputs 的形状为 [batch_size, 10]labels 为整数标签

完整代码

import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision.transforms as transforms
import torchvision
from torch.utils.data import DataLoader# 定义CNN模型(修复了变量引用问题)
class SimpleCNN(nn.Module):def __init__(self):super(SimpleCNN, self).__init__()self.conv1 = nn.Conv2d(3, 6, 5)      # 第一个卷积层:3输入通道,6输出通道,5x5卷积核self.pool = nn.MaxPool2d(2, 2)        # 最大池化层:2x2窗口,步长2self.conv2 = nn.Conv2d(6, 16, 5)     # 第二个卷积层:6输入通道,16输出通道,5x5卷积核self.fc1 = nn.Linear(16 * 5 * 5, 120)# 全连接层1:400输入 -> 120输出self.fc2 = nn.Linear(120, 84)      # 全连接层2:120输入 -> 84输出self.fc3 = nn.Linear(84, 10)       # 输出层:84输入 -> 10类 logitsdef forward(self, x):# 输入形状:[batch_size, 3, 32, 32]x = self.pool(F.relu(self.conv1(x)))  # -> [batch, 6, 14, 14](池化后尺寸减半)x = self.pool(F.relu(self.conv2(x)))  # -> [batch, 16, 5, 5] x = x.view(-1, 16 * 5 * 5)            # 展平为一维向量:16 * 5 * 5=400x = F.relu(self.fc1(x))             # -> [batch, 120]x = F.relu(self.fc2(x))             # -> [batch, 84]x = self.fc3(x)                     # -> [batch, 10](未应用softmax,配合CrossEntropyLoss使用)return x# 初始化模型、损失函数和优化器
net = SimpleCNN()               # 实例化模型
criterion = nn.CrossEntropyLoss()  # 使用交叉熵损失函数(自动处理softmax)
optimizer = torch.optim.SGD(net.parameters(), lr=0.001,      # 学习率momentum=0.9)   # 动量参数# 数据预处理和加载
transform = transforms.Compose([transforms.ToTensor(),            transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  
])# 加载CIFAR-10训练集
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,download=True,  # 自动下载数据集transform=transform
)
trainloader = DataLoader(trainset, batch_size=4,   # 每个batch包含4张图像shuffle=True)  # 打乱数据顺序# 训练循环
for epoch in range(2):  # 进行2个epoch的训练running_loss = 0.0for i, data in enumerate(trainloader, 0):inputs, labels = data# 前向传播outputs = net(inputs)loss = criterion(outputs, labels)# 反向传播和优化optimizer.zero_grad()   # 清空梯度loss.backward()         # 计算梯度optimizer.step()       # 更新参数running_loss += loss.item()# 每2000个batch打印一次if i % 2000 == 1999:avg_loss = running_loss / 2000print(f'Epoch [{epoch+1}/{2}], Batch [{i+1}/2000], Loss: {avg_loss:.3f}')running_loss = 0.0print("训练完成!")

最后总结

通过PyTorch和卷积神经网络,你可以有效地处理图像分类任务。借助PyTorch的灵活性,可以根据特定的数据集和应用程序构建、训练和微调模型。示例代码仅为理论过程,实际项目中还有大量优化空间。

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

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

相关文章

Spring Cloud Stream - 构建高可靠消息驱动与事件溯源架构

一、引言 在分布式系统中,传统的 REST 调用模式往往导致耦合,难以满足高并发和异步解耦的需求。消息驱动架构(EDA, Event-Driven Architecture)通过异步通信、事件溯源等模式,提高了系统的扩展性与可观测性。 作为 S…

王者荣耀道具页面爬虫(json格式数据)

首先这个和英雄页面是不一样的,英雄页面的图片链接是直接放在源代码里面的,直接就可以请求到,但是这个源代码里面是没有的 虽然在检查页面能够搜索到,但是应该是动态加载的,源码中搜不到该链接 然后就去看看是不是某…

【一起来学kubernetes】12、k8s中的Endpoint详解

一、Endpoint的定义与作用二、Endpoint的创建与管理三、Endpoint的查看与组成四、EndpointSlice五、Endpoint的使用场景六、Endpoint与Service的关系1、定义与功能2、创建与管理3、关系与交互4、使用场景与特点 七、Endpoint的kubectl命令1. 查看Endpoint2. 创建Endpoint3. 编辑…

C# Enumerable类 之 集合操作

总目录 前言 在 C# 中,System.Linq.Enumerable 类是 LINQ(Language Integrated Query)的核心组成部分,它提供了一系列静态方法,用于操作实现了 IEnumerable 接口的集合。通过这些方法,我们可以轻松地对集合…

51c自动驾驶~合集54

我自己的原文哦~ https://blog.51cto.com/whaosoft/13517811 #Chameleon 快慢双系统!清华&博世最新:无需训练即可解决复杂道路拓扑 在自动驾驶技术中,车道拓扑提取是实现无地图导航的核心任务之一。它要求系统不仅能检测出车道和交…

Spring Cloud Eureka - 高可用服务注册与发现解决方案

在微服务架构中,服务注册与发现是确保系统动态扩展和高效通信的关键。Eureka 作为 Spring Cloud 生态的核心组件,不仅提供去中心化的服务治理能力,还通过自我保护、健康检查等机制提升系统的稳定性,使其成为微服务架构中的重要支撑…

Unity屏幕适配——立项时设置

项目类型:2D游戏、竖屏、URP 其他类型,部分原理类似。 1、确定设计分辨率:750*1334 为什么是它? 因为它是 iphone8 的尺寸,宽高比适中。 方便后续适配到真机的 “更长屏” 或 “更宽屏” 2、在场景…

深度学习中LayerNorm与RMSNorm对比

LayerNorm不同于BatchNorm,其与batch大小无关,均值和方差 在 每个样本的特征维度 C 内计算, 适用于 变长输入(如 NLP 任务中的 Transformer) 详细的BatchNorm在之前的一篇文章进行了详细的介绍:深度学习中B…

使用WireShark解密https流量

概述 https协议是在http协议的基础上,使用TLS协议对http数据进行了加密,使得网络通信更加安全。一般情况下,使用WireShark抓取的https流量,数据都是加密的,无法直接查看。但是可以通过以下两种方法,解密抓…

Linux命令基础,创建,输入,输出,查看,查询

什么是命令、命令行 命令行:即:Linux终端(Terminal),是一种命令提示符页面。以纯“字符”的形式操作操作系统,可以使用各种字符化命令对操作系统发出操作指令。 命令:即Linux程序。一个命令就…

【笔记】深度学习模型训练的 GPU 内存优化之旅:综述篇

开设此专题,目的一是梳理文献,目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化,所以最初思考的专题名称是“显存突围:深度学习模型训练的 GPU 内存优化之旅”,英文缩写是 “MLSys_GPU_Memory_Opt”。…

Vue 3 Diff 算法深度解析:与 Vue 2 双端比对对比

文章目录 1. 核心算法概述1.1 Vue 2 双端比对算法1.2 Vue 3 快速 Diff 算法 2. 算法复杂度分析2.1 时间复杂度对比2.2 空间复杂度对比 3. 核心实现解析3.1 Vue 2 双端比对代码3.2 Vue 3 快速 Diff 代码 4. 性能优化分析4.1 性能测试数据4.2 内存使用对比 5. 使用场景分析5.1 Vu…

神经网络的基本知识

感知机 输入:来自其他 n 个神经元传递过来的输入信号 处理:输入信号通过带权重的连接进行传递, 神经元接受到总输入值将与神经元的阈值进行比较 输出:通过激活函数的处理以得到输出 感知机由两层神经元组成, 输入层接受外界输入信号传递给…

C++相关基础概念之入门讲解(上)

1. 命名空间 C中的命名空间(namespace)是用来避免命名冲突问题的一种机制。通过将类、函数、变量等封装在命名空间中,可以避免不同部分的代码中出现相同名称的冲突。在C中,可以使用namespace关键字来定义命名空间。 然后我们在调…

网络协议栈

网络协议栈的位置 用户在应用层的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中&#xf…

C++之list类(超详细)

在上一节中我们学习了STL中的vector这个容器,这节我们来学习一下另外一个常用的容器——list。 文章目录 前言 一、list的介绍 二、list的使用及相关接口 1.list的使用 2.list的迭代器使用 3.list的相关接口 3.1 list capacity 3.2 list element access 3.3…

mysql、oracle、SQLserver之间的区别和优势

MySQL、Oracle和SQL Server都是常见的关系型数据库管理系统(RDBMS),它们在某些方面有一些区别和优势。 MySQL: MySQL是一种开源的RDBMS,由Oracle公司开发和维护。它具有快速、稳定和易于使用的特点。MySQL适用于中小型…

75.HarmonyOS NEXT ImageItemView组件深度剖析:手势交互与动画实现(二)

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT ImageItemView组件深度剖析:手势交互与动画实现(二) 一、手势系统架构 .gesture(GestureGroup(GestureMode.Exclusiv…

Qt 控件概述 QWdiget

Qt为我们提供了很多控件,这些控件拿过来就可以使用 目录 QWidget 属性 WindowFrame的影响 QWidget Qt中所有的组件都是继承自QWidget Qt Creator中的右侧可以看到QWidget的各种属性 其中各种属性都可以在Qt文档中找到说明 ​ 属性 enabled:描述该组…

适合企业内训的AI工具实操培训教程(37页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读:适合企业内训的 AI 工具实操培训教程 在当今数字化时代,人工智能(AI)技术迅速发展,深度融入到各个领域,AIGC(人工智能生成内容)更是成…