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

深度学习——卷积神经网络(CNN)简介 卷积神经网络简介 文章目录卷积神经网络简介前言一.如何理解卷积1.1什么是卷积1.2 为什么要卷积二.神经网络的结构三.卷积层四.池化层五.全连接层六.数据训练 前言 卷积神经网络(Convolutional Neural Networks,简称:CNN)是深度学习当中一个非常重要的神经网络结构。它更多的是用在图像图片处理,视频处理,音频处理以及自然语言处理等等。 早在上世纪80年代左右,卷积神经网络的概念就已经被提出来了。但其真正的崛起却是在21世纪之后,21世纪之后,随着深度学习理论的不断完善,同时,由 阅读详情

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 out

model=ImageClassification()
summary(model,(3,32,32),batch_size=1)

----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv2d-1             [1, 6, 30, 30]             168
         MaxPool2d-2             [1, 6, 15, 15]               0
            Conv2d-3            [1, 16, 13, 13]             880
         MaxPool2d-4              [1, 16, 6, 6]               0
            Linear-5                   [1, 120]          69,240
            Linear-6                    [1, 84]          10,164
            Linear-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=0
    num=0.1
    for x,y in dataloader:
        y_=model(x)
        loss=error(y_,y)
        loss_sum+=loss.item()
        num+=1
        optimizer.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)
    

优化方向

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(一)     前面, 我们介绍了DNN及其参数求解的方法(BP算法),我们知道了DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸的问题.那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法.     我们知道神经网络主要有三个部分组成, 分别为:      ① 网络结构--- 描述... 阅读详情

相关推荐

深度学习Deep Learning(01)_CNN卷积神经网络

深度学习 Deep Learning github地址:https://github.com/lawlite19/DeepLearning_Python 有关神经网络的部分可以查看这里的BP神经网络的部分:https://github.com/lawlite19/MachineLearning_Python 一、CNN卷积神经网络 参考文章:http://cs231n.github.io/convo

莫失莫忘的博客 3万+

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)

前面, 我们介绍了DNN及其参数求解的方法(BP算法),我们知道了DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸的问题.那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法. 我们知道神经网络主要有三个部分组成, 分别为: 网络结构---描述神经元的层次与连接神经元的结构. 激活函数(激励函数)--- 用于加入非线性的因素,解决线性模型所不能解决的问题. 参数学习方...

fenglepeng的博客 4万+

深度学习(DL):卷积神经网络(CNN):从原理到实现

序深度学习现在大火,虽然自己上过深度学习课程、用过keras做过一些实验,始终觉得理解不透彻。最近仔细学习前辈和学者的著作,感谢他们的无私奉献,整理得到本文,共勉。1.前言(1)神经网络的缺陷在神经网络一文中简单介绍了其原理,可以发现不同层之间是全连接的,当神经网络的深度、节点数变大,会导致过拟合、参数过多等问题。(2)计算机视觉(图像)背景 通过抽取只依赖图像里小的子区域的局部特征,然后利用这些特

雪伦的专栏 5万+

深度学习——卷积神经网络(CNN)

深度学习——卷积神经网络(CNN)

Xiao_Ya__的博客 2万+

深度学习-卷积神经网络(CNN)

CNN基本原理 经典CNN 卷积神经网络基本原理 卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。 卷积层 二维卷积运算:给定二维的图像I作为输入,二维卷积核K,卷积运算可表示为 S(i,j)=(I∗K)(i,j)=∑m∑nI(i−m,j−n)K(m,n)S(i, j)=(I * K)(i, j)=\sum_{m} \sum_{n} I(i-m, j-n) K(m, n)S(i,j)=(I∗K)(i,j)=∑m​∑n​I(i−m,j−n)K(m,n),卷积核需要进行上下翻转.

love1005lin的博客 9432

DL:卷积神经网络(CNN)的一些学习网址

将学习CNN过程中所用的网址整理一下。。。。。与我相关的有关CNN的网址【1】知乎:卷积神经网络的多层参数是怎么推导的 https://www.zhihu.com/question/42838093/answer/94920915?from=profile_answer_card【2】知乎:卷积神经网络保证“位移、尺度、形变不变性”该怎么理解 https://www.zhihu.com/ques

梦里水乡的专栏 5067

基于MATLAB深度学习工具箱的CNN卷积神经网络训练和测试

MATLAB深度学习工具箱是MATLAB官方提供的一套深度学习工具,包括了多种深度学习模型和算法,可以方便地进行模型训练和测试。其中,CNN卷积神经网络是工具箱中的一个重要模型,可以用于图像分类、物体检测、语音识别等多个领域。深度学习工具箱的核心是神经网络模型的搭建和训练。用户可以通过编写MATLAB代码,定义网络结构、损失函数、优化器等参数,进行网络训练和测试。同时,工具箱也提供了许多预训练的模型和数据集,方便用户学习和实践。

FPGA/MATLAB学习教程/源码/项目合作开发 1万+

【学习笔记】深度学习之CNN卷积神经网络

什么是CNN(卷积神经网络)? 定义 卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法

my_brother的博客 2527

深度学习---卷积神经网络(CNN)

文章目录1. 什么是深度学习?2. 深度学习框架2.1 卷积神经网络(CNN)2.1.1 引子 :边界检测2.1.2 CNN的基本概念2.1.3 CNN的结构组成2.1.4 卷积神经网络 VS. 传统神经网络 1. 什么是深度学习? 深度学习(DL, Deep Learning)是机器学习(ML, Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标–人工智能(AI, Artificial Intelligence)。 深度学习是学习样本数据的内在规律和表示层次,

weixin_48678602的博客 7615

【深度学习】最强算法之:卷积神经网络(CNN)

深度学习必会算法之:卷积神经网络

商务合作 | 面试培训 | 职场规划 ==>主页扫码 5438

【深度学习基础模型】卷积神经网络(Convolutional Neural Networks, CNN)详细理解并附实现代码。

卷积神经网络(Convolutional Neural Networks, CNN)学习笔记!

985小水博的摸鱼日常 1273

深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)

前面我们说了CNN的一般层次结构, 每个层的作用及其参数的优缺点等内容.https://blog.youkuaiyun.com/fenglepeng/article/details/106077002 一 CNN参数初始化及参数学习方法 和机器学习很多算法一样, CNN在进行训练之前也要进行参数的初始化操作. 我们知道, 在机器学习中的参数值一般都是随机给定的. 但是, 这CNN的参数初始化又和机器学习中有所不同. 1.1 W的初始化 由于CNN 中的参数更新的过程一般是通过BP算法实现的,再由前面我们在深..

fenglepeng的博客 8076

R语言dlnm包避坑指南:手把手教你配置交叉基矩阵(附温度分层与滞后多项式设置)

本文详细介绍了R语言dlnm包在配置交叉基矩阵时的实用技巧与避坑指南,特别针对温度分层与滞后多项式设置提供了具体参数配置建议。通过解析`crossbasis()`函数的核心参数、温度分析的分层策略以及不同基函数的适用场景,帮助研究者高效构建分布滞后非线性模型,避免常见错误并优化模型性能。

weixin_34094282的博客 403

DL —— 卷积神经网络(convolutional neural networks,CNN)

卷积神经网络是深度学习最核心的部分; 最早用于美国银行系统识别手写支票; 卷积神经网络 一、训练数据 因为卷积神经网络是为了解决图像领域的应用而提出的网络结构,所以训练数据一般为视频图像数据(张量数据,tensor);可以根据图像的性质对CNN的结构进行设计,使得CNN相比一般的神经网络结构更加高效、性能更好。 其中: X(i)是第i张图像; H * W * D是每个图像的尺寸; D表示整个训练...

biubiusion的博客 1498

从报错到优化:一次Gauss JDBC参数限制排查实录(32767参数上限避坑指南)

本文详细记录了排查GaussDB JDBC驱动因绑定参数数量超过32767上限而抛出`PSQLException`(报错信息为`Tried to send an out-of-range integer as a 2-byte value`)的全过程。文章深入分析了该限制的底层协议原理,并提供了应用层分批查询、使用临时表以及优化业务逻辑等多种解决方案,旨在帮助开发者规避此参数上限陷阱,构建更稳健的数据访问层。

rgv23456789的博客 220

给自建PC网站接入微信支付流程

本文为开发者提供微信支付(直连商户模式)的简明接入指南。核心步骤包括:1)注册商户号获取MchID;2)配置APIv3证书与密钥;3)绑定AppID并开通支付权限;4)选择支付方式(推荐Native扫码);5)通过签名请求发起支付;6)处理加密回调通知。重点强调安全规范:证书管理、HTTPS强制、密钥保护和幂等设计。建议从沙箱测试开始,逐步实现完整的支付闭环。本文帮助开发者绕过官方文档的复杂性,快速实现自主集成的微信支付功能。

彩旗工作室的博客 3232

【深度学习基础】一文读懂卷积神经网络(Convolutional Neural Networks, CNN)

CNN从90年代的LeNet开始,21世纪初沉寂了10年。直到2012年Geoffrey和他学生Alex在ImageNet的竞赛中,刷新了image classification的记录,一举奠定了deep learning 在计算机视觉中的地位。这次竞赛中Alex所用的结构就被称为作为AlexNet,AlexNet使用的就是CNN。1. 基本概念2. 卷积神经网络的结构2.1 输入层 2.2 卷积层2.3 池化层2.4 全连接层2.5 卷积神经网络的其它概念(1)感受野(2)padding(3)stride

非晚非晚的博客 5766

从原理到实践:详解RGBD相机深度与彩色图像对齐(D2C)算法

本文深入解析了RGBD相机深度与彩色图像对齐(D2C)算法的原理与实现。针对自组装相机中深度图与彩色图不匹配的核心痛点,文章从相机模型、坐标系变换等数学基础讲起,剖析了传统点映射算法的缺陷,并重点介绍了高效的矩形区域映射算法。该算法通过将深度像素视为矩形区域进行映射,有效解决了空洞和遮挡问题,并附有可直接复用的C++代码与优化技巧,为三维重建、机器人视觉等应用奠定坚实基础。

weixin_28363123的博客 243

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

在深度学习中,卷积是一种特殊的数学运算,它被广泛应用于卷积神经网络(Convolutional Neural Networks,CNNs)中。在卷积神经网络中,卷积主要是指对于输入张量(通常是图像或时间序列数据)的一种特殊的线性变换。卷积的定义在深度学习中稍有不同,具体来说,在卷积神经网络中,卷积操作是通过将一个可训练的小型过滤器(也称为卷积核或滤波器)应用于输入张量的不同位置来计算输出张量的过程。这个过滤器被滑动到输入张量的每个位置,并且在每个位置进行点乘和求和来计算一个输出值。

iazzz的博客 2647

如何缩减layout电路面积?减少晶体管的数量——以全加器为例【VLSI】

How to reduce the number of transistors to reduce circuit area? -- Take the Binary Full Adder as an example 优化面积的方法 1. 减少晶体管的数量 2. 改变gate matrix的布局

Jie_MSD的博客 6437

数学史学习资料:史前数学

著名物理学家伽莫夫(宇宙大爆炸理论以及核聚变理论的提出者)在他的科普书《从1到无穷大》中举了这样一个例子。两个原始部落的酋长比赛,看谁说的数字大。第一个酋长说了三,第二个酋长想了半天,然后说你赢了。你今天听起来觉得这两个人真可笑,至少说出四,岂不就赢了?但是对这两位酋长来讲,所拥有的东西就很少超过三个,比三个多的东西他们就觉得没有必要数清楚了,就用许多来形容了。也就是说,他们生活的环境限制了他们的认知。

howard2005的专栏 902

【深度学习】卷积神经网络CNN

李宏毅深度学习笔记。

开心星人的博客 1885

构建基于知识图谱的金融风险关联网络可视化系统

知识图谱是一种用于表示实体及其关系的图形结构,能够将分散的数据组织成易于理解和查询的形式。语义性:通过实体和关系的描述,赋予数据语义。结构化:以图的形式组织数据,便于计算机处理。动态性:支持实时更新,能够反映数据的最新状态。风险关联网络是指将金融风险事件、实体及其关系以图形形式表示的网络。关联性:能够展示风险事件之间的相互影响。动态性:能够实时反映风险变化。可视化:便于金融从业者直观理解风险分布。可视化系统是指通过图形界面展示数据或信息的系统。提供直观的数据显示。帮助用户快速理解复杂数据。

AI天才研究院 1061

《深度学习》卷积神经网络CNN 实现手写数字识别

卷积神经网络是一种深度学习模型,主要应用于图像和视频处理任务。它的设计灵感来源于生物视觉系统的工作原理。"""定义神经网络"""class CNN(nn.Module): # 继承nn算法中的Moduledef __init__(self): # 这里输入大小为(1,28,28)self.conv1 = nn.Sequential( # 第一层卷积, 将多个层组合成一起。nn.Conv2d( # 二维卷积成,2d一般用于图像,3d用于视频数据(多一个时间维度),1d一般用于结构化的序列数据。

wx_AHao1004Y的博客 3433

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4139

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: [深度学习]神经网络
下一篇: [深度学习]循环神经网络RNN
Letmooning
博客等级 码龄2年 503粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值