Python----卷积神经网络(卷积为什么能识别图像)

一、卷积的概念

        卷积是一种数学运算,通常用于信号处理和图像分析。在卷积神经网络中,卷积操作用于提取输入数据(如图像)中的特征。通过将输入数据与卷积核(滤波器)进行卷积运算,CNN能够识别图像中的边缘、纹理和其他重要特征。

二、卷积核的概念

        卷积核(或称为滤波器)是一个小矩阵,通常比输入数据的尺寸小。卷积核在输入图像上滑动(即进行卷积运算),计算在其覆盖区域内的加权和,从而生成特征图(feature map)。卷积核的参数通常是可以学习的,训练过程中会自动调整以优化模型的性能。

        卷积核其实是一个小矩阵,在定义时需要考虑以下几方面的内容:

                卷积核的个数:卷积核的个数决定了其输出特征矩阵的通道数。

                卷积核的值:卷积核的值是自定义的,根据想要提取的特征来进行设置的,后续 进行更新,就像全连接中的 一样,只是乘积运算变成卷积运算。

                卷积核的大小:常见的卷积核有1x1、3x3、5x5等,注意一般都是奇数x奇数。

三、卷积的过程

卷积过程包括以下几个步骤:

  1. 选择卷积核:定义一个大小为 K×K 的卷积核。

  2. 滑动卷积核:将卷积核从输入图像的左上角开始,向右和向下滑动,逐步覆盖整个图像。

  3. 计算加权和:在卷积核覆盖的区域,按元素相乘并求和,生成输出特征图的相应位置的值。

  4. 重复:继续移动卷积核,直到覆盖完所有位置。

        卷积的过程是将卷积核在图像上进行滑动计算,每次滑动到一个新的位置时,卷积核 和图像进行点对点的计算, 并将其求和得到一个新的值,然后将这个新的值加入到特征图中,最终得到一个新的 特征图。

        第一次卷积就是从输入特征矩阵的左上角开始,通过点对点的计算,就是1x0、 0x0、0x1、0x0等计算,并将其乘积的结果加起来,得到一个新的值1,这就完成第 一次卷积操作。 

        接着卷积核就会在输入特征矩阵上不断的滑动卷积,先向右,到最右边之后,就会向 下移动一格,然后从最左边开始向右滑动。也就是说,卷积过程秉持着先左后右、先 上后下的移动规律进行卷积,直到右下角位置为止。 

        可以通过不断调整卷积核的大小、卷积核的值和卷积操作的步长,可以提取出不同尺 度和位置的特征。 

        可以看到,用一条右上到左下的卷积核去和输入特征做卷积,得到的结果 中,从右上到左下的值变的比其它地方的大。

        根据分类算法中Softmax和交叉熵的理解,当一个地方的值变大之后,这个值会使得 整个概率分布更加偏向于这个地方, 也就是说,这个地方的概率会变得更高。

        因此,从Softmax和交叉熵的角度来看,这 个位置的值变大是一个好的预测结果。 在交叉熵损失函数中,它衡量了模型输出的概率分布与实际标签的分布之间的差异。

        具体来说,当某一类别的概率较大而实际标签对应的类别为1时,交叉熵损失较小; 反之,如果概率较小而实际标签对应的类别为1时,交叉熵损失较大。

        因此,通过提高某一特定特征区域的值,模型更加关注这一特征,有助于提高对应类 别的概率得分,从而改善模型的性能。

四、步长

        步长(stride)是指卷积核在输入数据上滑动的步幅。步长的大小影响输出特征图的尺寸。步长为1时,卷积核每次移动一个像素;步长为2时,卷积核每次移动两个像素。步长的选择对卷积层的计算量和特征图大小有直接影响。

五、Padding

        Padding(填充值)是指在输入数据的边缘添加额外的像素,以控制输出特征图的大小。Padding 可以帮助在卷积过程保持空间信息,尤其是当卷积核在输入边缘时。通常使用填充(Padding)操作来增加图像的大小,以便在应用卷积操作时保持输出 特征图的大小与输入特征图相同或更接近。常用的 Padding 类型包括“VALID”和“SAME”。

5.1、VALID

        VALID Padding(有效填充)意味着在进行卷积运算时,不在输入图像的边缘添加任何填充值。结果是输出特征图的尺寸会小于输入图像的尺寸,因为卷积核无法覆盖到所有输入数据的边缘。

5.2、SAME

        SAME Padding(相同填充)意味着在进行卷积运算时,向输入图像的边缘添加填充值,以确保输出特征图的尺寸与输入图像相同(在步长为1的情况下)。这样可以保持特征图的空间结构,同时又允许卷积核充分利用输入数据。

六、 卷积核为什么总是选择奇数大小

        在深度学习中,卷积核的大小一般选择奇数是为了方便处理和避免引入不必要的对称性。

        当卷积核的大小是奇数时,它具有唯一的一个中心像素,这个中心像素点可以作为滑 动的默认参考点,即锚点。 这使得在进行卷积操作时,卷积核可以在输入图像的每个像素周围均匀地取样。这样 的好处是,在进行卷积操作时,可以保持对称地处理图像的每个位置,从而避免引入 额外的偏差和不对称性。

        相反,如果卷积核的大小是偶数,那么在某些位置上,中心 像素会落在两个相邻的像素之间,这可能导致对称性问题。

        此外,选择奇数大小的卷积核还有一个重要的优点是,在进行空间卷积时,可以确保 卷积核有一个明确的中心像素,这有助于处理图像的边缘和边界像素,避免模糊和信 息损失。 当然,并不是所有情况下都必须选择奇数大小的卷积核。

        在某些特定情况下,偶数大 小的卷积核也可以使用,并且在某些特定任务中可能表现得更好。但是在大多数情况 下,奇数大小的卷积核是一种常见且推荐的选择,因为它可以简化卷积操作,并有助 于保持图像处理的对称性和一致性。

七、设计思路

import tensorflow as tf  # 输入特征张量  
# [batch_size, input_height, input_width, in_channels]  
# 这里创建了一个形状为 (1, 5, 5, 1) 的输入张量,代表一个批次,大小为5x5的图像,1个通道  
input = tf.constant([[  [[1], [0], [0], [0], [1]],  [[0], [1], [0], [1], [0]],  [[0], [0], [1], [0], [0]],  [[0], [1], [0], [1], [0]],  [[1], [0], [0], [0], [1]]  
]], dtype=tf.float32)  # 卷积核张量  
# [kernel_height, kernel_width, in_channels, out_channels]  
# 这里创建了一个形状为 (3, 3, 1, 1) 的卷积核,代表3x3的滤波器,1个输入通道,1个输出通道  
wc1 = tf.constant([[  [[0]], [[0]], [[1]]],  [[[0]], [[1]], [[0]]],  [[[1]], [[0]], [[0]]]  
], dtype=tf.float32)  # 创建卷积层  
# 使用 tf.nn.conv2d 进行卷积操作,strides=[1, 1, 1, 1] 表示在每个维度上移动1步,padding='SAME' 填充使输出与输入相同大小  
conv_layer1 = tf.nn.conv2d(input, wc1, strides=[1, 1, 1, 1], padding='SAME')  # 将卷积的输出转为 NumPy 数组  
output1 = conv_layer1.numpy()  # 获取卷积层输出特征图的形状  
batch_size = output1.shape[0]  # 批次大小  
height = output1.shape[1]       # 高度  
width = output1.shape[2]        # 宽度  
channels = output1.shape[3]     # 通道数  # 打印卷积后特征图的形状和值  
print(f"卷积后的特征大小: [batch_size={batch_size}, height={height}, width={width}, channels={channels}]")  
print("输出特征图:", output1.reshape(height, width))  # 以 (height, width) 的形状打印输出特征图  

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

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

相关文章

linux FTP服务器搭建

FTP服务器搭建 系统环境:ubuntu 搭建方式:win系统下通过ssh连接ubuntu,搭建FTP服务 一、ssh连接 ssh -p 端口 用户名IP ssh -p 22 ubuntu192.168.1.109 密码:ubuntu123456 二、安装配置FTP服务器 1、安装 sudo apt install v…

语音合成之十韵律之美:TTS如何模拟语音的节奏和语调

韵律之美:TTS如何模拟语音的节奏和语调 1. 引言:韵律在语音合成中的重要性1.1 追求自然的TTS:超越可懂度1.2 定义韵律:语音的音乐1.3 韵律为何重要:传递意义、情感与自然度 2. TTS韵律建模的基础技术2.1 利用文本&…

基于强化学习的用于非刚性图像配准的引导式超声采集|文献速递-深度学习医疗AI最新文献

Title 题目 Guided ultrasound acquisition for nonrigid image registration usingreinforcement learning 基于强化学习的用于非刚性图像配准的引导式超声采集 01 文献速递介绍 超声成像通常用于引导手术和其他医疗程序,在这些过程中,临床医生会持…

数据库中DDL、DML、DCL的区别是什么?

数据库中DDL、DML、DCL的区别是什么? 在数据库的使用过程中,SQL(结构化查询语言)常常被用来执行不同的操作,主要分为三类:DDL(数据定义语言)、DML(数据操纵语言&#xf…

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成

海量聊天消息处理:ShardingJDBC分库分表、ClickHouse冷热数据分离、ES复合查询方案、Flink实时计算与SpringCloud集成 一、背景介绍 每天有2000万条聊天消息,一年下来几千万亿海量数据。为应对这种规模的数据存储和处理需求,本文将从以下几…

Vim 中替换字符或文本

在 Vim 中替换字符或文本可以使用 替换命令(substitute),其基本语法为: :[range]s/old/new/[flags]1. 基本替换 命令说明:s/foo/bar/替换当前行的第一个 foo 为 bar:s/foo/bar/g替换当前行的 所有 foo 为 bar:%s/foo/bar/g替换 …

当传统美术馆遇上数字革命:观众体验将迎来哪些颠覆性变革?

当数字科技与艺术创作深度交织,美术馆与艺术机构正经历前所未有的颠覆性浪潮。这是否宣告传统展览空间已正式跨入数字媒介主导的新纪元?投影映射与虚拟现实技术不断突破物理限制,画布与雕塑的边界在光影与代码中逐渐消融。这场革命不仅重构了…

内容/社区APP增长:用Deeplink让用户分享的内容“一键直达”

对于内容平台和互动社区APP而言,优质内容的自发传播是用户增长和活跃度提升的核心驱动力之一。用户发现一篇深度好文、一个精彩视频或是一个引人入胜的讨论帖,自然而然地想要分享给好友。然而,这个看似简单的分享动作,却往往在触达…

Uniapp:vite.config.js全局配置

目录 一、基本概述二、配置自动引入插件一、基本概述 vite.config.js 是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被自动加载,一般用于配置 vite 的编译选项 二、配置自动引入插件 在项目命令行终端中执行如下代码 npm install unplugin-auto-import…

JavaScript 与 Java 学习笔记

一、JavaScript 简介 1. 定义 浏览器脚本语言:主要用于实现网页交互功能(鼠标点击、键盘输入响应等) 服务器端扩展:通过 Node.js 运行时环境可进行后端开发 2. 核心特点 动态性:可实时修改 DOM 结构(增…

Shell脚本-随机数实战案例

在Shell脚本编程中,生成随机数是一项非常实用的技能。无论是用于模拟、测试、游戏开发还是安全相关的应用(如生成密码),能够灵活地生成随机数都是非常有用的。本文将通过几个实际的应用案例来展示如何在Shell脚本中使用随机数解决…

面试算法高频08-动态规划-03

练习题 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每…

基于 EFISH-SBC-RK3588 的无人机多光谱/红外热成像边缘计算方案

一、硬件架构设计‌ ‌核心算力平台(EFISH-SBC-RK3588)‌ ‌处理器性能‌:搭载 8 核 ARM 架构(4Cortex-A762.4GHz 4Cortex-A551.8GHz),集成 6 TOPS NPU 与 Mali-G610 GPU,支持多光谱图像实时融…

Python小酷库系列:pyNest,把FastAPI程序写出Spring的味道

pyNest,把FastAPI程序写出Spring的风格 快速入门1、安装pyNest2、创建项目3、编写app_module.py4、编写app_service.py5、编写app_controller.py6、编写main.py7、启动程序 核心概念1、Modules2、Controllers3、Providers4、ORM Provider NestJS是风靡于Node.js圈的…

HTML 详解:从基础结构到语义标签

目录 一、HTML 是什么&#xff1f;二、HTML 的基本结构✅ 简要说明&#xff1a; 三、常见 HTML 标签讲解3.1 标题标签 <h1> ~ <h6>3.2 段落和换行3.3 超链接3.4 图像插入3.5 列表无序列表&#xff1a;有序列表&#xff1a; 3.6 表格结构 四、HTML 语义化标签详解五…

用Python做有趣的AI项目 6:AI音乐生成器(LSTM Melody Generator)

&#x1f3b5; 项目名称&#xff1a;AI音乐生成器&#xff08;LSTM Melody Generator&#xff09; &#x1f9e0; 项目简介 这个项目的目标是&#xff1a;用 AI 来自动生成简单的旋律&#xff08;MIDI格式&#xff09;&#xff0c;类似于基础的钢琴曲、背景音乐片段。 我们使…

【运维】利用任务计划程序定时重启 nssm 服务 | Windows 服务每日定时维护实践

&#x1f680; 利用任务计划程序定时重启 nssm 服务 | Windows 服务每日定时维护实践 一、前言 在 Windows 系统中&#xff0c;nssm&#xff08;Non-Sucking Service Manager&#xff09; 是一个非常好用的工具&#xff0c;可以将任意可执行程序注册为系统服务。很多运维场景…

MATLAB小试牛刀系列(1)

问题描述 某机床厂生产甲、乙两种机床&#xff0c;每台机床销售后的利润分别为 4 千元与 3 千元。生产甲机床需用 A、B 机器加工&#xff0c;加工时间分别为每台 2h 和每台 1h&#xff1b;生产乙机床需用 A、B、C 三种机器加工&#xff0c;加工时间均为每台 1h。若每天可用于加…

云原生周刊:Kubernetes v1.33 正式发布

开源项目推荐 Robusta Robusta 是一个开源的 K8s 可观测性与自动化平台&#xff0c;旨在增强 Prometheus 告警的智能化处理能力。它通过规则和 AI 技术对告警进行丰富化处理&#xff0c;自动附加相关的 Pod 日志、图表和可能的修复建议&#xff0c;支持智能分组、自动修复和高…

React速通笔记

相关视频&#xff1a; 黑马程序员前端React18入门到实战视频教程&#xff0c;从reacthooks核心基础到企业级项目开发实战&#xff08;B站评论、极客园项目等&#xff09;及大厂面试全通关_哔哩哔哩_bilibili 一、React介绍 React由Meta公司开发&#xff0c;是一个用于 构建W…