机器学习——卷积神经网络

卷积神经网络CNN

多层感知机MLP的层数足够,理论上可以用其提取出二位特征,但是毕竟复杂,卷积神经网络就可以更合适的来提取高维的特征。
而卷积其实是一种运算
在这里插入图片描述
二维离散卷积的公式
在这里插入图片描述
可以看成g是一个图像的像素点,f是每个像素点对应的权重,权重越大,重要程度越大,这里的权重f可以根据梯度反向传播的方式训练
在CNN中进行卷积运算的层称为卷积层,层中的权重f被称为卷积核
如果将f进行翻转,得到的参数在位置上是翻转的,对参数数值没有影响。这样的运算称为互相关。

卷积的运算例子

在这里插入图片描述

用卷积神经网络完成图像分类任务

class CNN(nn.Module):def __init__(self, num_classes=10):super().__init__()# 类别数目self.num_classes = num_classes# Conv2D为二维卷积层,参数依次为# in_channels:输入通道# out_channels:输出通道,即卷积核个数# kernel_size:卷积核大小,默认为正方形# padding:填充层数,padding=1表示对输入四周各填充一层,默认填充0self.conv1 = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, padding=1)# 第二层卷积,输入通道与上一层的输出通道保持一致self.conv2 = nn.Conv2d(32, 32, 3, padding=1)# 最大池化,kernel_size表示窗口大小,默认为正方形self.pooling1 = nn.MaxPool2d(kernel_size=2)# 丢弃层,p表示每个位置被置为0的概率# 随机丢弃只在训练时开启,在测试时应当关闭self.dropout1 = nn.Dropout(p=0.25)self.conv3 = nn.Conv2d(32, 64, 3, padding=1)self.conv4 = nn.Conv2d(64, 64, 3, padding=1)self.pooling2 = nn.MaxPool2d(2)self.dropout2 = nn.Dropout(0.25)# 全连接层,输入维度4096=64*8*8,与上一层的输出一致self.fc1 = nn.Linear(4096, 512)self.dropout3 = nn.Dropout(0.5)self.fc2 = nn.Linear(512, num_classes)# 前向传播,将输入按顺序依次通过设置好的层def forward(self, x):x = F.relu(self.conv1(x))x = F.relu(self.conv2(x))x = self.pooling1(x)x = self.dropout1(x)x = F.relu(self.conv3(x))x = F.relu(self.conv4(x))x = self.pooling2(x)x = self.dropout2(x)# 全连接层之前,将x的形状转为 (batch_size, n)x = x.view(len(x), -1)x = F.relu(self.fc1(x))x = self.dropout3(x)x = self.fc2(x)return x
#%%
batch_size = 64 # 批量大小
learning_rate = 1e-3 # 学习率
epochs = 5 # 训练轮数
np.random.seed(0)
torch.manual_seed(0)# 批量生成器
trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=True)
testloader = DataLoader(testset, batch_size=batch_size, shuffle=False)model = CNN()
# 使用Adam优化器
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)
# 使用交叉熵损失
criterion = F.cross_entropy# 开始训练
for epoch in range(epochs):losses = 0accs = 0num = 0model.train() # 将模型设置为训练模式,开启dropoutwith tqdm(trainloader) as pbar:for data in pbar:images, labels = dataoutputs = model(images) # 获取输出loss = criterion(outputs, labels) # 计算损失# 优化optimizer.zero_grad()loss.backward()optimizer.step()# 累积损失num += len(labels)losses += loss.detach().numpy() * len(labels)# 精确度accs += (torch.argmax(outputs, dim=-1) \== labels).sum().detach().numpy()pbar.set_postfix({'Epoch': epoch, 'Train loss': f'{losses / num:.3f}', 'Train acc': f'{accs / num:.3f}'})# 计算模型在测试集上的表现losses = 0accs = 0num = 0model.eval() # 将模型设置为评估模式,关闭dropoutwith tqdm(testloader) as pbar:for data in pbar:images, labels = dataoutputs = model(images)loss = criterion(outputs, labels)num += len(labels)losses += loss.detach().numpy() * len(labels)accs += (torch.argmax(outputs, dim=-1) \== labels).sum().detach().numpy()pbar.set_postfix({'Epoch': epoch, 'Test loss': f'{losses / num:.3f}', 'Test acc': f'{accs / num:.3f}'})
# 该工具包中有AlexNet、VGG等多种训练好的CNN网络
from torchvision import models 
import copy# 定义图像处理方法
transform = transforms.Resize([512, 512]) # 规整图像形状def loadimg(path):  # 加载路径为path的图像,形状为H*W*Cimg = plt.imread(path)# 处理图像,注意重排维度使通道维在最前img = transform(torch.tensor(img).permute(2, 0, 1))# 展示图像plt.imshow(img.permute(1, 2, 0).numpy())plt.show()# 添加batch size维度img = img.unsqueeze(0).to(dtype=torch.float32)img /= 255 # 将其值从0-255的整数转换为0-1的浮点数return imgcontent_image_path = os.path.join('style_transfer', 'content', '04.jpg')
style_image_path = os.path.join('style_transfer', 'style.jpg')# 加载内容图像
print('内容图像')
content_img = loadimg(content_image_path)
# 加载风格图像
print('风格图像') 
style_img = loadimg(style_image_path)

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

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

相关文章

使用LabVIEW进行大数据数组操作的优化方法

针对大数据量数组操作,传统的内存处理方法可能导致内存不足。通过LabVIEW的图像批处理技术,可以有效地进行大数据数组操作,包括分块处理、并行处理和内存优化等。这种方法能显著提高处理效率和系统稳定性。 图像批处理的优势 内存优化&#…

docker部署使用本地文件的fastapi项目

项目背景:项目使用python开发,需要使用ubutun系统部署后端api接口,对外使用8901端口。 1:项目结构: 2:项目需要使用的pyhton版本为3.9,dockerfile内容如下: # FROM python:3.9# WORKDIR /co…

LLM大语言模型(十六):最新开源 GLM4-9B 本地部署,带不动,根本带不动

目录 前言 本机环境 GLM4代码库下载 模型文件下载:文件很大 修改为从本地模型文件启动 启动模型cli对话demo 慢,巨慢,一个字一个字的蹦 GPU资源使用情况 GLM3资源使用情况对比 前言 GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 …

面试官:前端实现图片懒加载怎么做?这不是撞我怀里了嘛!

前端懒加载(也称为延迟加载或按需加载)是一种网页性能优化的技术,主要用于在网页中延迟加载某些资源,如图片、视频或其他媒体文件,直到它们实际需要被用户查看或交互时才进行加载。这种技术特别适用于长页面或包含大量…

单片机数码管时钟电路的设计

5 调试 数码管的引脚1~4,a~g以及小数点的排列都不是连续的,这就意味着难免需要飞线。数码管是分共阴和共阳的,起初我错把原理图中的共阳数码管当成了共阴数码管,焊上去了之后才发现,为了避免拆卸…

JWT 从入门到精通

什么是 JWT JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案 JSON Web Token Introduction - jwt.ioLearn about JSON Web Tokens, what are they, how they work, when and why you should use them.https://jwt.io/introduction 一、常见会…

hadoop疑难问题解决_NoClassDefFoundError: org/apache/hadoop/fs/adl/AdlFileSystem

1、问题描述 impala执行查询:select * from stmta_raw limit 10; 报错信息如下: Query: select * from sfmta_raw limit 10 Query submitted at: 2018-04-11 14:46:29 (Coordinator: http://mrj001:25000) ERROR: AnalysisException: Failed to load …

在 SEO 中,一个好的网页必须具备哪些 HTML 标签和属性?

搜索引擎优化 (SEO) 是涉及提高网站在搜索引擎上的可见性的过程。这是通过提高网站在搜索引擎结果页面(例如Google)上的排名来实现的。网站在这些页面上的显示位置越高,就越有可能获得更大的流量。 搜索引擎优化涉及了…

2024国内热门大语言模型在科研方面的应用

本博客总结了几款热门的国产大语言模型,帮助大家利用这些大语言模型更好的进行科研。 模型介绍 1.文心一言 链接:https://yiyan.baidu.com/ 开发方:百度 特点:专注于中文语言理解与生成,适合中文文本的语义理解任务。 百度推出…

UnityXR Interaction Toolkit 如何使用XRHand手部识别

前言 Unity的XR Interaction Toolkit是一个强大的框架,允许开发者快速构建沉浸式的VR和AR体验。随着虚拟现实技术的发展,手部追踪成为了提升用户交互体验的关键技术之一。 本文将介绍如何在Unity中使用XR Interaction Toolkit实现手部识别功能。 准备工作 在开始之前,请…

数字科技如何助力博物馆设计,强化文物故事表现力?

国际博物馆日是每年为了推广博物馆和文化遗产,而设立的一个特殊的日子,让我们可以深入探讨博物馆如何更好地呈现和保护我们的文化遗产,随着近年来的数字科技发展,其在博物馆领域的应用越来越广泛,它为博物馆提供了新的…

使用vite从0开始搭建vue项目

使用Vite从0开始创建vue项目 第一步:创建项目目录 mkdir vue-demo -创建目录 cd vue-demo --进入项目 npm init -y --生成package.json文件 第二步:安装vite、typescript--ts、vue、vitejs/plugin-vue--对单文件组件、热重载、生产优化的支持 pnpm…

【Spring Boot】异常处理

异常处理 1.认识异常处理1.1 异常处理的必要性1.2 异常的分类1.3 如何处理异常1.3.1 捕获异常1.3.2 抛出异常1.3.4 自定义异常 1.4 Spring Boot 默认的异常处理 2.使用控制器通知3.自定义错误处理控制器3.1 自定义一个错误的处理控制器3.2 自定义业务异常类3.2.1 自定义异常类3…

STM32F103单片机工程移植到航顺单片机HK32F103注意事项

一、简介 作为国内MCU厂商中前三阵营之一的航顺芯片,建立了世界首创超低功耗7nA物联网、万物互联核心处理器浩瀚天际10X系列平台,接受代理商/设计企业/方案商定制低于自主研发十倍以上成本,接近零风险自主品牌产品,芯片设计完成只…

《python程序语言设计》2018版第5章第48题以0,0为圆心 绘制10个左右的同心圆

在0,0点处绘制10个圆。 其实这个题先要记住python不会0,0为原点进行绘画。 它是按半径来画,所以我们要先把turtle这个小画笔送到它应该去的起点。(我经常有这样的错觉,每次都是这样想办法把自己拉回来) 我…

(学习笔记)数据基建-数据安全

(学习笔记)数据基建-数据安全 数据安全数据安全实施难点数据安全保障流程数据安全措施实施阶段数据安全如何量化产出数据安全思考 数据安全 数据安全问题是最近比较热的话题,数据泄漏引发的用户信任危机事件也比比皆是,以及跨部门…

AWS EMR Serverless

AWS概述 EMR Serverless 简介 在AWS概述一文中简单介绍过AWS EMR, 它是AWS提供的云端大数据平台。借助EMR可以设置集群以便在几分钟内使用大数据框架处理和分析数据。创建集群可参考官方文档:Amazon EMR 入门。但集群创建之后需要一直运行,用户需要管理…

42. 接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1…

Linux——PXE_FTP_EL8

PXE Kickstart ( el8 ) 使用两个网口一个用net接口用于下载服务和软件包,另一个为仅主机用于与其他的空主机相连 PXE(preboot execute environment) 预启动执行环境。支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启…

水库大坝安全监测系统打通监控数据“最后一公里”

一、概述 我国有水库8万座左右,其中土石坝多数,病险水库占水库也很多。众所周知,水库在防洪、兴利上具有重要的调节作用,如何保证水库安全,及合理有效的利用水资源,是水利建设者需要探讨的主要内容。科学技…