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

[深度学习]卷积神经网络CNN

1 图像基础知识

import numpy as np
import matplotlib.pyplot as plt
# 图像数据
#img=np.zeros((200,200,3))
img=np.full((200,200,3),255)
# 可视化
plt.imshow(img)
plt.show()
# 图像读取
img=plt.imread('img.jpg')
plt.imshow(img)
plt.show()

2 CNN概述

  • 卷积层conv+relu
  • 池化层pool
  • 全连接层FC/Linear

3 卷积层

 

import matplotlib.pyplot as plt
import torch
from torch import nn
# 数据
img=plt.imread('img.jpg')
print(img.shape)
# conv
img=torch.tensor(img).permute(2,0,1).unsqueeze(0).to(torch.float32)
conv=nn.Conv2d(in_channels=3,out_channels=5,kernel_size=(3,5),stride=(1,2),padding=2)
# 处理
fm=conv(img)
print(fm.shape)

4 池化层

  • 下采样:样本减少
  • 上采样(深采样):样本增多
  • 最大池化相交平均池化使用更多
  • 通常kernel_size=(3,3),stride=(2,2),padding=(自定义)

import torch
from torch import nn
# 创建数据
torch.random.manual_seed(22)
data=torch.randint(0,10,[1,3,3],dtype=torch.float32)
print(data)

# 最大池化
pool=nn.MaxPool2d(kernel_size=(2,2),stride=(1,1),padding=0)
print(pool(data))

# 平均池化
pool=nn.AvgPool2d(kernel_size=(2,2),stride=(1,1),padding=0)
print(pool(data))

5 图像分类案例(LeNet)

import torch
import torch.nn as nn
from torchvision.datasets import CIFAR10
from torchvision.transforms import ToTensor
from torchvision.transforms import Compose
import matplotlib.pyplot as plt
from torchsummary import summary
from torch import optim
from torch.utils.data import DataLoader
# 获取数据
train_dataset=CIFAR10(root='cnn_net',train=True,transform=Compose([ToTensor()]),download=True)
test_dataset=CIFAR10(root='cnn_net',train=False,transform=Compose([ToTensor()]),download=True)
print(train_dataset.class_to_idx)
print(train_dataset.data.shape)
print(test_dataset.data.shape)

plt.imshow(test_dataset.data[100])
plt.show()
print(test_dataset.targets[100])

# 模型构建
class ImageClassification(nn.Module):def __init__(self):super().__init__()self.conv1=nn.Conv2d(in_channels=3,out_channels=6,kernel_size=3,stride=1,padding=0)self.conv2=nn.Conv2d(in_channels=6,out_channels=16,kernel_size=3,stride=1,padding=0)self.pool1=nn.MaxPool2d(kernel_size=2,stride=2)self.pool2=nn.MaxPool2d(kernel_size=2,stride=2)self.fc1=nn.Linear(in_features=576,out_features=120)self.fc2=nn.Linear(in_features=120,out_features=84)self.out=nn.Linear(in_features=84,out_features=10)def forward(self,x):x=self.pool1(torch.relu(self.conv1(x)))x=self.pool2(torch.relu(self.conv2(x)))x=x.reshape(x.size(0),-1)x=torch.relu(self.fc1(x))x=torch.relu(self.fc2(x))out=self.out(x)return outmodel=ImageClassification()
summary(model,(3,32,32),batch_size=1)
----------------------------------------------------------------Layer (type)               Output Shape         Param #
================================================================Conv2d-1             [1, 6, 30, 30]             168MaxPool2d-2             [1, 6, 15, 15]               0Conv2d-3            [1, 16, 13, 13]             880MaxPool2d-4              [1, 16, 6, 6]               0Linear-5                   [1, 120]          69,240Linear-6                    [1, 84]          10,164Linear-7                    [1, 10]             850
================================================================
Total params: 81,302
Trainable params: 81,302
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.01
Forward/backward pass size (MB): 0.08
Params size (MB): 0.31
Estimated Total Size (MB): 0.40
----------------------------------------------------------------
# 模型训练
optimizer=optim.Adam(model.parameters(),lr=0.0001,betas=[0.9,0.99])
error=nn.CrossEntropyLoss()
epoches=10
for epoch in range(epoches):dataloader=DataLoader(train_dataset,batch_size=2,shuffle=True)loss_sum=0num=0.1for x,y in dataloader:y_=model(x)loss=error(y_,y)loss_sum+=loss.item()num+=1optimizer.zero_grad()loss.backward()optimizer.step()print(loss_sum/num)
# 模型保存
torch.save(model.state_dict(),'model.pth')
# 模型预测
test_dataloader=DataLoader(test_dataset,batch_size=8,shuffle=False)
model.load_state_dict(torch.load('model.pth',weights_only=False))
corr=0
num=0
for x,y in test_dataloader:y_=model(x)out=torch.argmax(y_,dim=-1)corr+=(out==y).sum()num+=len(y)print(corr/num)

优化方向

相关文章:

[深度学习]卷积神经网络CNN

1 图像基础知识 import numpy as np import matplotlib.pyplot as plt # 图像数据 #imgnp.zeros((200,200,3)) imgnp.full((200,200,3),255) # 可视化 plt.imshow(img) plt.show() # 图像读取 imgplt.imread(img.jpg) plt.imshow(img) plt.show() 2 CNN概述 卷积层convrelu池…...

从零开始,Docker进阶之路(三):Docker镜像与命令

一、Docker核心名词 镜像文件、容器、仓库 镜像:简单理解为就是一个安装包,里面包含容器所需要运行的基础文件和配置信息,比如:redis镜像、mysql镜像等。 镜像的来源方式: 1.自己做镜像,比如自己开发微服…...

【计算机网络】网络层详解

文章目录 一、引言二、IP 基础知识1、IP 地址2、路由3、IP报文4、IP报文的分片与重组 三、IP 属于面向无连接型四、IP协议相关技术1、DNS2、ICMP3、NAT技术4、DHCP 一、引言 TCP/IP的心脏是网络层。这一层主要由 IP 和 ICMP 两个协议组成。网络层的主要作用是“实现终端节点之…...

后端开发刷题 | 最小的K个数(优先队列)

描述 给定一个长度为 n 的可能有重复值的数组,找出其中不去重的最小的 k 个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4(任意顺序皆可)。 数据范围:0≤k,n≤10000,数组中每个数的大小0≤val≤1000 要…...

【JavaEE】——阻塞队列,生产消费者模型(较难)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!希望本文内容能够帮助到你! 目录 一:阻塞队列 1:概念 2:阻塞队列与普通队列比较 二:“生…...

makefile和CMakeLists/C++包管理器

make 大家可能会很奇怪,都什么年代了,还学makefile,cmake都有些过时了,为什么还要再学这个呢? 我是这么看待这个问题的,cmake跨平台性还是很有有优势的,有着多年积累的底蕴,借助大模…...

STM32 通过软件模拟 I2C 驱动 24Cxx 系列存储器

目录 一、AT24CXXX 系列存储器介绍1、基本信息2、寻址方式3、页地址与页内单元地址4、I2C 地址5、AT24CXX 的数据读写5.1 写操作5.1.1 按字节写5.1.2 按页写 5.2 读操作5.2.1 当前地址读取5.2.2 随机地址读取5.2.3 顺序读取 二、代码实现1、ctl_i2c2、at24c3、测试程序 I2C 相关…...

Go语言匿名字段使用与注意事项

1. 定义 Go语言支持一种特殊的字段只需要提供类型而不需要写字段名的字段,称之为匿名字段或者嵌套字段。 所谓匿名字段实际上是一种结构体嵌套的方式,所以也可以称作嵌套字段。 这种方式可以实现组合复用,即通过匿名字段,结构体…...

2024最新!!Java后端面试题(2)看这一篇就够了

hello uu们 感谢收看!!!!我最近听了一首歌《21》,真的很感慨,马上步入20的我也感觉时间真的飞快...望大家都能过上理想的生活,不负内心的所托...现在口语化更新答案,让大家更加模拟的…...

超好用的10款视频剪辑软件,从入门到精通

视频剪辑软件哪款比较好呢?无论是专业制作团队、自媒体创作者,还是家庭用户,一款好用的视频剪辑软件都能极大地提升创作效率和作品质量。以下是十款备受推崇的视频剪辑软件,分别从适用人群、易用程度和功能特点进行介绍。 1.影忆…...

python股票因子,交易所服务器宕机,量化交易程序怎么应对

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入法

本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发主板。 一、安装输入法并查看输入…...

使用nest+typeorm框架写数据库导致mysql的binlog暴增记录

这 两天用nesttypeorm写了一个商城,上线后mysql日志binlog两天就达到了10几个G,排查结果如下: 有个功能是定时遍历所有未签收的订单,看看是否到了自动签收时间,如果到了,就把订单状态设置成已签收。 代码…...

组合逻辑元件与时序逻辑元件

组合逻辑元件和时序逻辑元件都是数字电路中的基本构建块,但它们在功能和结构上存在显著差异。 1. 组合逻辑元件: 内容: 组合逻辑元件的输出仅取决于当前的输入,而与之前的输入无关。 它们没有记忆功能。 常见的组合逻辑元件包括: 与门 (AND…...

天龙八部怀旧单机微改人面桃花+安装教程+GM工具+虚拟机一键端

今天给大家带来一款单机游戏的架设:天龙八部怀旧单机微改人面桃花。 另外:本人承接各种游戏架设(单机联网) 本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xf…...

docker管理

拉取容器镜像 docker pull 镜像名:镜像版本查看镜像 docker images查看容器列表 # 查看正在运行的容器 docker ps # 查看全部的容器(包括停止的容器) docker ps -a进入容器 docker exec -it 容器id /bin/bash停止容器 docker stop 容器id运行容器 docker start 容器id删除…...

electron教程(三)窗口设置

在main.js文件中,创建窗口时会设置窗口的大小,其实还有很多其他属性,可以根据实际需求选择设置,但部分属性存在局限性,官网也有明确告知:自定义窗口 | Electron (electronjs.org) 项目文件目录如下&#x…...

图像增强论文精读笔记-Deep Retinex Decomposition for Low-Light Enhancement(Retinex-Net)

1. 论文基本信息 论文标题:Deep Retinex Decomposition for Low-Light Enhancement 作者:Chen Wei等 发表时间和期刊:2018;BMVC 论文链接:https://arxiv.org/abs/1808.04560 2. 研究背景和动机 低光照条件下拍摄的…...

2024年配置YOLOX运行环境+windows+pycharm24.0.1+GPU

1.配置时间2024/9/25 2.Anaconda-python版本3.7,yolox版本0.2.0 YOLOX网址: https://github.com/Megvii-BaseDetection/YOLOX 本人下载的这个版本 1.创建虚拟环境 conda create -n yolox37 python37 激活 conda activate yolox37 2.安装Pytorch cuda等&…...

vue-i18n在使用$t时提示类型错误

1. 问题描述 Vue3项目中,使用vue-i18n,在模版中使用$t时,页面可以正常渲染,但是类型报错。 相关依赖版本如下: "dependencies": {"vue": "^3.4.29","vue-i18n": "^9.1…...

基于OpenStack的毕业设计:从零搭建私有云平台的入门实战与避坑指南

最近在帮学弟学妹们看毕业设计,发现不少同学对云计算方向很感兴趣,尤其是想用OpenStack做个私有云平台。但一上手就懵了,组件多、文档杂,环境动不动就崩,最后时间都花在折腾部署上了。我自己当初也踩过不少坑&#xff…...

RWKV7-1.5B-g1a企业应用案例:替代传统规则引擎做智能FAQ与文档摘要

RWKV7-1.5B-g1a企业应用案例:替代传统规则引擎做智能FAQ与文档摘要 1. 引言:企业文本处理的痛点与机遇 在传统企业IT系统中,FAQ系统和文档摘要功能通常依赖规则引擎实现。这种方案存在几个明显痛点: 维护成本高:每次…...

MacOS极简部署OpenClaw:GLM-4.7-Flash云端沙盒体验

MacOS极简部署OpenClaw:GLM-4.7-Flash云端沙盒体验 1. 为什么选择云端沙盒体验 作为一个长期在本地折腾各种AI工具的技术爱好者,我最近被OpenClaw的自动化能力深深吸引。但在第一次尝试本地部署时,就被Node环境配置、依赖冲突等问题劝退。直…...

低成本AI实验:OpenClaw+nanobot学生方案

低成本AI实验:OpenClawnanobot学生方案 1. 为什么学生需要关注OpenClaw 作为一名计算机专业的学生,我一直在寻找既能满足课程项目需求又不会让钱包"大出血"的AI解决方案。直到发现了OpenClawnanobot这个组合,它完美解决了我在机器…...

让 Claude Code 帮你“看家“:Hooks 与 /loop 入门

让 Claude Code 帮你"看家":Hooks 与 /loop 入门 上周我把一个重构任务扔给 Claude,出门开了两小时会。回来发现它把 .env.production 改了。 那一刻我才意识到,单纯会用 Claude Code 还不够,你还得学会怎么管住它。折…...

零基础玩转OpenClaw:星图平台百川2-13B镜像+自动化初体验

零基础玩转OpenClaw:星图平台百川2-13B镜像自动化初体验 1. 为什么选择星图平台OpenClaw组合 作为一个长期被本地环境配置折磨的技术爱好者,当我第一次听说星图平台提供预装OpenClaw和百川2-13B模型的"开箱即用"镜像时,内心是充满…...

实战指南:如何用Mask R-CNN在iSAID数据集上提升航空影像分割效果(附调参技巧)

航空影像实例分割实战:Mask R-CNN在iSAID数据集上的调优策略 航空影像分析正逐渐成为城市规划、灾害监测和国防安全等领域的关键技术。与常规自然图像不同,这类影像通常包含大量密集分布的小目标,且目标尺度变化极大——从几个像素的小型车辆…...

ComfyUI工作流迁移终极指南:从新手到专家的完整备份与复用教程

ComfyUI工作流迁移终极指南:从新手到专家的完整备份与复用教程 【免费下载链接】ComfyUI 最强大且模块化的具有图形/节点界面的稳定扩散GUI。 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 想要将精心设计的AI创作工作流在不同设备间无缝迁移吗…...

上位机知识篇---IOF物联网:概念、演进与应用全景解析

“IOF”这一缩写,在物联网的技术语境下,承载着两种截然不同却又极具代表性的内涵。它既可以被理解为 “Internet of Things”的另一种早期表述,强调物联网作为互联网与传感器技术融合的产物;也可以指代一个更为前沿和具体的技术框…...

基于Matlab的双向LSTM网络需求预测:包含训练集结果、训练集误差、测试集结果及测试集误差的输出

基于matlab的双向LSTM网络的需求预测,结果输出包括训练集结果、训练集误差,测试集结果、测试集误差。 数据可更换自己的,程序已调通,可直接运行。最近在折腾时间序列预测的项目,偶然发现双向LSTM在处理需求预测这类前后…...