卷积神经网络记录(一)基础知识整理

本文详细介绍了卷积神经网络(CNN)的基础知识,包括与全连接神经网络的异同、卷积和卷积核的概念、CNN的结构及其重要组成部分如卷积层、激活函数层、池化层和全连接层。通过实例解释了卷积操作和特征提取,并探讨了CNN相对于全连接网络的优势,如参数共享和局部感受野。最后,提出了计算输出Feature Map shape的方法和CNN处理图像数据的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卷积神经网络记录

最近一段时间在学习卷积神经网络的知识,看了很多博客和资料之后,决定自己写一篇记录一下学习地知识,巩固一下所学。

1.卷积神经网络与全连接神经网络的异同

首先来看卷积神经网络之前的网络的异同,两种神经网络结构对比图如下:

在这里插入图片描述

在结构上,两种网络看起来不同,实际上还是很相似的。两者都是通过一层一层的节点组织起来的,在训练过程上也是基本一致。两种神经网络的的区别就在于相邻两层的不同节点之间的连接方式,对于全连接网络(FC),位于相邻两层上的任意两个节点都是连接的,而卷积神经网络(CNN)的相邻两层之间,只有部分节点相连。

那么,为什么会有CNN网络呢? 显然,对于FC,输入数据的所有信息都会得到有效的利用,因为通过全连接的方式,每一点信息都会对训练过程做出“ 贡献 ”, 这是它的优点,但是,当处理图像数据的时候,这就反而成了累赘, 之前使用 FC 处理MNIST数据集,第一层上有 784 个节点,因为我们的图像是 28 * 28 , 仅仅是这样的小图片,需要进行更新的参数已经很多了,显然,对于更大的图片,这样的过程是吃不消的。因此,CNN 应运而生,之后会介绍到 CNN 通过权值共享等等方法,有效地解决了这个问题。

2.卷积神经网络的重要概念

卷积是什么

不管是什么算法,当牵扯到数学层面的时候,都不太好理解 ( ̄m ̄),但是理解之后都会更清楚整个过程。
如果去查卷积的概念,可能会出现这样的定义:
卷积(convolution) 是通过两个函数 f f f g g g 生成第三个函数的一种数学算子,表征函数 f f f g g g 经过翻转和平移的重叠部分的面积。数学定义如下:
h ( x ) = f ( x ) ⋅ g ( x ) = ∫ f ( t ) ⋅ g ( x − t ) d ( t ) h(x) =f(x)\cdot g(x)=\int f(t)\cdot g(x-t)d_{(t)} h(x)=f(x)g(x)=f(t)g(xt)d(t)
不好理解,事实上,在卷积网络上使用的离散卷积,也就是不连续的,它是一种运算方式,也就是按照卷积核,将输入对应位置的数据进行加权和运算,接下来结合卷积核的概念,就会很好理解了。如果想要进一步理解卷积,可以在知乎上查找这一问题:
如何理解CNN中的卷积
其实不知有这一篇文章,另外还有很多问题下的回答都做了解释,这里就不一一列举了。

卷积核的概念

接上面,卷积核是整个网络的核心,训练CNN的过程就是不断更新卷积核参数直到最优的过程。

卷积核的定义:对于输入图像中的一部分区域,进行加权求和的处理,其中这个过程的权重,由一个函数定义,这个函数就是卷积核。(这个地方,在有些资料可能会将卷积核解释为权重矩阵,当然概念其实不是很重要,直接将卷积核理解为一种运算方式就可以了)
下面看图解,这样会更直观的理解这个计算过程:

在这里插入图片描述

左边的 Image 是输入的数

<think>好的,我现在要回答用户关于如何用Python或其他工具绘制卷积神经网络CNN)结构图或可视化的问题。首先,我需要回忆相关的知识,并确保按照用户的系统级指令来组织回答。 用户提到了几个引用,我需要先看下这些引用内容是否和问题相关。引用1是关于训练CNN进行分类,引用2是可视化CNN的方法汇总,引用3是Python实现BP和CNN,引用4是基于Python的CNN结构可视化,特别是安装TeXLive生成PDF的部分。看来引用2、4和问题直接相关,可能需要引用到。 接下来,我需要整理常见的可视化方法。常用的有使用Keras的model.summary()和plot_model函数,以及第三方库如Netron、TensorBoard,还有基于Graphviz的工具。此外,用户提到的引用4中提到了使用LaTeX生成结构图,这部分可能需要详细说明。 要确保回答符合格式要求:行内数学公式用$...$,独立公式用$$...$$,中文回答,结构清晰,分步骤,最后生成相关问题。同时,引用的地方需要添加引用标识,如[^2]、[^4]。 首先,回答部分应该分步骤说明不同方法,比如使用Keras内置工具、Netron、TensorBoard、Graphviz结合pydot,以及基于LaTeX的方法。每个步骤需要简要说明如何操作,并附上代码示例(如适用)。例如,使用Keras的plot_model函数时,需要展示代码示例,并提到需要安装pydot和graphviz。 然后,在引用到用户提供的引用内容时,比如引用2提到可视化方法汇总,引用4提到使用LaTeX生成结构图,需要在对应的部分添加引用标识。例如,在介绍使用LaTeX方法时,引用[^4]。 最后,生成相关问题,需要围绕CNN可视化方法的应用、工具比较、原理等展开,比如不同工具的优缺点,可视化在模型调试中的作用,使用LaTeX绘图的步骤,或者特定库如TensorBoard的使用方法。 需要检查LaTeX语法是否正确,例如行内公式是否正确使用$符号,独立公式是否用$$。例如,如果提到数学公式如卷积操作,可能需要写成$W_{new} = \frac{W - F + 2P}{S} + 1$,但根据问题,可能不定需要太多数学公式,但如果有的话要确保格式正确。 另外,用户提供的引用4中提到了安装TeXLive的步骤,这可能需要在基于LaTeX的方法中详细说明,或者至少提到需要安装相关包,并引用该部分。 最后,确保回答结构清晰,分点说明,代码块用正确的格式,以及相关问题部分有3个左右的问题,符合示例中的结构。</think>### 如何用Python或其他工具绘制卷积神经网络CNN)架构图 #### 1. **使用Keras内置工具** Keras提供了直接生成模型结构图的工具。通过`model.summary()`可快速查看层级信息,而`plot_model()`函数可生成可视化架构图。 ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense from tensorflow.keras.utils import plot_model model = Sequential([ Conv2D(32, (3,3), activation='relu', input_shape=(64,64,3)), MaxPooling2D(2,2), Flatten(), Dense(10, activation='softmax') ]) model.summary() # 输出层级信息 plot_model(model, to_file='model.png', show_shapes=True) # 生成结构图 ``` - **依赖项**:需安装`pydot`和`graphviz`(通过`pip install pydot graphviz`)[^2]。 #### 2. **使用Netron工具** Netron支持直接导入模型文件(如`.h5`、`.pb`)并交互式查看结构。例如保存Keras模型后,用Netron打开: ```python model.save('model.h5') # 保存模型 ``` - **步骤**:下载Netron([官网](https://github.com/lutzroeder/netron)),加载模型文件即可。 #### 3. **TensorBoard可视化** TensorFlow的TensorBoard可动态展示模型结构和训练过程: ```python import tensorflow as tf from datetime import datetime log_dir = "logs/" + datetime.now().strftime("%Y%m%d-%H%M%S") tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1) model.fit(..., callbacks=[tensorboard_callback]) # 训练时记录日志 ``` - **查看**:命令行输入`tensorboard --logdir logs/`,在浏览器中查看。 #### 4. **基于Graphviz和pydot** 手动定义网络节点关系,通过Graphviz生成矢量图: ```python import graphviz dot = graphviz.Digraph() dot.node('Input', 'Input Layer') dot.node('Conv1', 'Conv2D (32 filters)') dot.edge('Input', 'Conv1') dot.render('cnn_arch', format='png') # 生成图片 ``` #### 5. **基于LaTeX绘制结构图(学术场景)** 通过Python调用LaTeX的`TikZ`包生成PDF格式结构图,需安装TeX环境(如TeXLive)。 ```python # 生成TikZ代码示例 tikz_code = r""" \documentclass{article} \usepackage{tikz} \usetikzlibrary{shapes,arrows} \begin{document} \begin{tikzpicture} \node[draw] (input) {Input}; \node[draw, right of=input] (conv) {Conv2D}; \draw[->] (input) -- (conv); \end{tikzpicture} \end{document} """ with open('cnn.tex', 'w') as f: f.write(tikz_code) ``` - **编译**:使用`pdflatex cnn.tex`生成PDF。 --- ###
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值