网站前期策划,视频网站开发策划书,泗洪企业网站建设,菏泽住房和城乡建设局网站ps#xff1a;在 TensorFlow Keras 中#xff0c;构建 Sequential 模型的正确方式是将层作为列表传递#xff0c;而不是作为一系列单独的参数。 modelmodels.Sequential([layers#xff0c;layers]) 而不是modelmodels.Sequential(layers#xff0c;layers) 文章目录 卷积…ps在 TensorFlow Keras 中构建 Sequential 模型的正确方式是将层作为列表传递而不是作为一系列单独的参数。 modelmodels.Sequential([layerslayers]) 而不是modelmodels.Sequential(layerslayers) 文章目录 卷积操作及其计算过程的详细解释卷积的基本操作1. 卷积核Convolution Kernel卷积核如何提取特征 2. 卷积过程卷积的数学表示简单例子输出尺寸的计算 3.卷积矩阵在深度训练中的改变过程卷积核的调整过程1. 初始化2. 前向传播3. 反向传播和卷积核的更新4. 迭代过程 卷积核的角色 并行卷积结构和深度可分离卷积的详细数学解释并行卷积结构Inception 模块概念数学表示简单例子输出尺寸的计算为什么不同的卷积大小产生相同的尺寸输出 代码 卷积操作及其计算过程的详细解释
卷积是深度学习中用于图像和信号处理的一种基本数学操作。它通过应用卷积核或过滤器到输入数据上来提取重要特征。
卷积的基本操作
1. 卷积核Convolution Kernel
卷积核是一个小的矩阵通常是2D用于通过滤过输入数据来提取特定特征。
卷积核如何提取特征 边缘检测例如卷积核 K [ − 1 0 1 − 1 0 1 − 1 0 1 ] K \begin{bmatrix}-1 0 1 \\ -1 0 1 \\ -1 0 1\end{bmatrix} K −1−1−1000111 被用于边缘检测。这个特定的卷积核可以突出水平方向的边缘。它通过计算左侧像素与右侧像素的差异来工作这种差异在边缘处最大。 纹理和模式识别不同的卷积核可以识别不同的纹理和模式。例如对于识别特定方向的纹理卷积核会有特定的方向性。
在实际应用中通常不是手动设计这些卷积核而是通过训练过程让神经网络自行学习最优的卷积核以适应特定的任务和数据。
2. 卷积过程
将卷积核放在输入数据的左上角。将卷积核的每个元素与其覆盖的输入数据元素相乘然后将结果求和得到输出特征图的一个元素。将卷积核向右滑动一个步长Stride重复上述过程直到覆盖整个输入数据。
卷积的数学表示
卷积操作可以表示为 S ( i , j ) ( I ∗ K ) ( i , j ) ∑ m ∑ n I ( m , n ) K ( i − m , j − n ) S(i, j) (I \ast K)(i, j) \sum_m \sum_n I(m, n) K(i-m, j-n) S(i,j)(I∗K)(i,j)m∑n∑I(m,n)K(i−m,j−n)
其中 I I I 是输入图像 K K K 是卷积核 S S S 是输出特征图 i i i 和 j j j 表示特征图上的位置。 以一个 3 × 3 3 \times 3 3×3 的卷积核为例应用于一个二维输入数据如图像 S ( i , j ) ∑ m 0 2 ∑ n 0 2 I ( i m , j n ) K ( m , n ) S(i, j) \sum_{m0}^{2} \sum_{n0}^{2} I(im, jn) K(m, n) S(i,j)m0∑2n0∑2I(im,jn)K(m,n) 其中 I I I 是输入数据 K K K 是卷积核 S S S 是输出特征图 i i i 和 j j j 是特征图上的位置。
简单例子
假设输入数据是一个 4 × 4 4 \times 4 4×4 的矩阵卷积核是一个 3 × 3 3 \times 3 3×3 的矩阵如下所示 输入数据 I: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
卷积核 K: -1 0 1 -1 0 1 -1 0 1
将卷积核放在输入数据的左上角计算卷积不考虑步长和填充
S(0, 0) (1*-1 20 31) (5*-1 60 71) (9*-1 100 111) -1 0 3 - 5 0 7 - 9 0 11 7
将卷积核向右滑动一个步长并重复计算。
输出尺寸的计算
输出尺寸取决于输入尺寸、卷积核尺寸、步长和填充 Output Size Input Size − Filter Size 2 × Padding Stride 1 \text{Output Size} \frac{\text{Input Size} - \text{Filter Size} 2 \times \text{Padding}}{\text{Stride}} 1 Output SizeStrideInput Size−Filter Size2×Padding1
在不使用填充且步长为1的情况下上述例子中的输出尺寸将是 2 × 2 2 \times 2 2×2。
3.卷积矩阵在深度训练中的改变过程
在深度学习中卷积矩阵或称为卷积核、过滤器是通过训练过程逐渐调整以优化特征提取的。这个调整过程是通过反向传播算法和梯度下降方法实现的。
卷积核的调整过程
1. 初始化
初始化开始训练时卷积核的权重通常被初始化为随机小数值。
2. 前向传播
提取特征在训练过程中卷积核在前向传播阶段通过卷积操作提取输入数据的特征。 前向传播是数据通过神经网络的过程其中的每一步如下 数据输入原始数据输入网络。卷积操作数据通过卷积层卷积核应用于数据。激活函数卷积的结果通过激活函数如ReLU。池化可选步骤应用池化如最大池化降低维度。输出生成通过全连接层生成最终输出。
3. 反向传播和卷积核的更新
卷积核的更新发生在反向传播过程中该过程如下
损失计算计算预测输出和实际输出之间的差异损失。 损失函数衡量模型预测与实际标签之间的差距。常用的损失函数包括均方误差MSE和交叉熵损失。 假设有实际值 y y y 和预测值 y ^ \hat{y} y^MSE 计算公式为 MSE 1 n ∑ i 1 n ( y i − y ^ i ) 2 \text{MSE} \frac{1}{n} \sum_{i1}^{n} (y_i - \hat{y}_i)^2 MSEn1i1∑n(yi−y^i)2 其中 n n n 是样本数量。
梯度计算通过反向传播算法计算损失函数相对于卷积核权重的梯度。 对于每个权重 W W W损失函数的梯度计算为 ∂ Loss ∂ W ∂ Loss ∂ y ^ × ∂ y ^ ∂ W \frac{\partial \text{Loss}}{\partial W} \frac{\partial \text{Loss}}{\partial \hat{y}} \times \frac{\partial \hat{y}}{\partial W} ∂W∂Loss∂y^∂Loss×∂W∂y^
权重更新根据梯度和学习率更新卷积核的权重。更新公式为 W new W old − η × ∂ Loss ∂ W W_{\text{new}} W_{\text{old}} - \eta \times \frac{\partial \text{Loss}}{\partial W} WnewWold−η×∂W∂Loss
其中 W W W 是卷积核权重 η \eta η 是学习率 ∂ Loss ∂ W \frac{\partial \text{Loss}}{\partial W} ∂W∂Loss 是损失函数相对于 W W W 的梯度。
示例单层神经网络 假设有一个单层网络输出 y ^ W x b \hat{y} Wx b y^Wxb损失函数是 MSE。 损失对 W W W 的梯度为 ∂ Loss ∂ W 2 n ∑ ( y − y ^ ) × ( − x ) \frac{\partial \text{Loss}}{\partial W} \frac{2}{n} \sum (y - \hat{y}) \times (-x) ∂W∂Lossn2∑(y−y^)×(−x) 在反向传播中这个梯度用于更新 W W W。
4. 迭代过程
重复迭代这个过程在多个训练周期epoch中重复进行直到模型性能达到预定的标准或者停止改进。
卷积核的角色
在训练过程中卷积核逐渐学习到如何有效地提取输入数据的关键特征这些特征对于完成特定的深度学习任务如图像分类、物体检测等至关重要。
并行卷积结构和深度可分离卷积的详细数学解释
并行卷积结构Inception 模块
概念
Inception 模块是一种在同一网络层上并行应用多种不同尺寸卷积核的结构。它允许网络在单一层级上捕获多尺度特征。
数学表示
假设输入特征图为 X X XInception 模块中的不同分支可以表示如下 1 × 1 1 \times 1 1×1 卷积分支 Y 1 Conv 1 × 1 ( X ) Y_1 \text{Conv}_{1 \times 1}(X) Y1Conv1×1(X) 这里 Conv 1 × 1 \text{Conv}_{1 \times 1} Conv1×1 表示 1 × 1 1 \times 1 1×1 卷积用于捕获局部特征。 3 × 3 3 \times 3 3×3 卷积分支 Y 2 Conv 3 × 3 ( X ) Y_2 \text{Conv}_{3 \times 3}(X) Y2Conv3×3(X) 3 × 3 3 \times 3 3×3 卷积能捕获更广泛的空间特征。 5 × 5 5 \times 5 5×5 卷积分支 Y 3 Conv 5 × 5 ( X ) Y_3 \text{Conv}_{5 \times 5}(X) Y3Conv5×5(X) 5 × 5 5 \times 5 5×5 卷积提供了更大范围的感受野。
这些分支的输出被沿深度方向合并生成综合特征映射 Y Y Y Y [ Y 1 , Y 2 , Y 3 ] Y [Y_1, Y_2, Y_3] Y[Y1,Y2,Y3]
简单例子
考虑一个 224 × 224 × 3 224 \times 224 \times 3 224×224×3 的图像作为输入 X X X。Inception 模块中的 1 × 1 1 \times 1 1×1 卷积可能产生 224 × 224 × 64 224 \times 224 \times 64 224×224×64 的输出 Y 1 Y_1 Y1 3 × 3 3 \times 3 3×3 卷积产生相同尺寸的输出 Y 2 Y_2 Y2而 5 × 5 5 \times 5 5×5 卷积也产生相同尺寸的输出 Y 3 Y_3 Y3。合并这些输出我们得到一个 224 × 224 × 192 224 \times 224 \times 192 224×224×192 的特征映射 Y Y Y。
输出尺寸的计算
输出特征图的尺寸取决于几个因素
输入尺寸输入图像的尺寸。卷积核尺寸卷积核的大小。步长Stride卷积核在输入上滑动的步长。填充Padding在输入周围添加的零的层数。
输出尺寸的计算公式为 Output Size Input Size − Filter Size 2 × Padding Stride 1 \text{Output Size} \frac{\text{Input Size} - \text{Filter Size} 2 \times \text{Padding}}{\text{Stride}} 1 Output SizeStrideInput Size−Filter Size2×Padding1
为什么不同的卷积大小产生相同的尺寸输出
在前面的例子中 1 × 1 1 \times 1 1×1 3 × 3 3 \times 3 3×3 和 5 × 5 5 \times 5 5×5 的卷积产生了相同尺寸的输出这是因为 步长和填充的调整通过调整步长和填充可以使不同大小的卷积核产生相同尺寸的输出。通常较大的卷积核会使用更多的填充来保持输出尺寸不变。 保持特征图空间分辨率这种做法使得并行的卷积分支可以在深度方向上直接合并因为它们具有相同的空间维度。
所以假设输入尺寸为 224 × 224 224 \times 224 224×224卷积核尺寸分别为 1 × 1 1 \times 1 1×1 3 × 3 3 \times 3 3×3 和 5 × 5 5 \times 5 5×5步长为 1并且对于 3 × 3 3 \times 3 3×3 和 5 × 5 5 \times 5 5×5 卷积使用适当的填充分别为 1 和 2来保持输出尺寸不变。根据上述公式所有这些卷积操作将产生 224 × 224 224 \times 224 224×224 的输出特征图。
代码
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, Concatenate
from tensorflow.keras.models import Model# 定义一个函数来创建并行卷积层
def parallel_convolution(input_tensor):# 1x1 卷积conv_1x1 Conv2D(filters64, kernel_size(1, 1), paddingsame, activationrelu)(input_tensor)# 3x3 卷积conv_3x3 Conv2D(filters64, kernel_size(3, 3), paddingsame, activationrelu)(input_tensor)# 5x5 卷积conv_5x5 Conv2D(filters64, kernel_size(5, 5), paddingsame, activationrelu)(input_tensor)# 合并不同尺寸卷积的结果output Concatenate()([conv_1x1, conv_3x3, conv_5x5])return output# 输入层
input_layer Input(shape(224, 224, 3))# 应用并行卷积层
output_layer parallel_convolution(input_layer)# 创建模型
model Model(inputsinput_layer, outputsoutput_layer)# 查看模型概况
model.summary()