关于深度学习和神经网络中卷积的知识

在深度学习和神经网络中有一些必备知识如下

  1. 网络(Network)

    • 网络是由多个节点(神经元)和连接这些节点的边(权重)组成的结构,用于处理和传递信息。神经网络通常包含输入层、隐藏层和输出层,每一层中的神经元通过加权连接传递信息,从而实现特定的功能,如分类、回归、图像识别等。
  2. 卷积(Convolution)

    • 卷积是一种数学运算,通过滑动窗口(称为卷积核或滤波器)在输入数据(如图像)上进行移动,并计算窗口覆盖区域内的加权和,从而提取特征。卷积层是卷积神经网络(CNN)中的关键部分,广泛用于图像处理和计算机视觉任务中。
    • 卷积的公式为:(f∗g)(t)=∫−∞∞f(τ)g(t−τ)dτ(f * g)(t) = \int_{-\infty}^{\infty} f(\tau)g(t - \tau) d\tau(f∗g)(t)=∫−∞∞​f(τ)g(t−τ)dτ 在离散形式下为:(f∗g)(n)=∑m=−∞∞f(m)g(n−m)(f * g)(n) = \sum_{m=-\infty}^{\infty} f(m)g(n - m)(f∗g)(n)=∑m=−∞∞​f(m)g(n−m)
  3. 全连接(Fully Connected, FC)

    • 全连接层是神经网络中的一种层,其中每个神经元与上一层的所有神经元都连接。这种连接方式可以捕捉输入数据的全局信息,但计算复杂度较高,通常用于网络的最后几层以进行最终的分类或回归。
    • 全连接层的公式为:y=Wx+by = Wx + by=Wx+b 其中,yyy 是输出向量,WWW 是权重矩阵,xxx 是输入向量,bbb 是偏置向量。
  4. 注意力(Attention)

    • 注意力机制是一种增强神经网络处理能力的技术,通过分配不同权重给输入数据的不同部分,使网络能够关注重要的信息并忽略不相关的信息。注意力机制在自然语言处理(NLP)任务中尤为重要,特别是在Transformer模型中得到了广泛应用。
    • 注意力的计算方式之一是“加性注意力”,其公式为:Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)VAttention(Q,K,V)=softmax(dk​​QKT​)V 其中,QQQ 是查询向量,KKK 是键向量,VVV 是值向量,dkd_kdk​ 是键向量的维度。

其中卷积在深度学习中,尤其是在卷积神经网络中,是一种核心的操作。它通过使用卷积核(滤波器)来提取输入数据的特征。 

接下来卡看一个卷积运用的例子

import tensorflow as tf
from tensorflow.keras import layers, models
# 创建一个卷积层
conv_layer = layers.Conv2D(
    filters=32,         # 卷积核的数量(输出特征图的数量)
    kernel_size=(3, 3), # 卷积核的尺寸
    strides=(1, 1),     # 卷积核的步长
    padding='same',     # 边界填充方式,可以是 'valid' 或 'same'
    activation='relu',  # 激活函数
    input_shape=(28, 28, 1)  # 输入数据的形状(例如28x28的灰度图像)
)
# 创建一个Sequential模型
model = models.Sequential()

# 添加卷积层
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))

# 添加池化层
model.add(layers.MaxPooling2D((2, 2)))

# 添加更多的卷积层和池化层
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

# 添加全连接层
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 训练模型(假设训练数据已经准备好)
model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))

1.首先引用tensorflow库和Keras的子模块layersmodel

2.创建卷积层

  • filters=32:卷积核的数量,即输出特征图的数量。
  • kernel_size=(3, 3):卷积核的尺寸。
  • strides=(1, 1):卷积核的步长。
  • padding='same':填充方式,'same'表示输出尺寸与输入相同,'valid'表示不进行填充。
  • activation='relu':使用ReLU作为激活函数。
  • input_shape=(28, 28, 1):输入数据的形状,28x28的单通道灰度图像。

3.构建简单的卷积神经网络

  • 使用Keras的Sequential模型来顺序添加层。
  • 添加卷积层、池化层和更多的卷积层和池化层以增加模型的深度和特征提取能力。
  • 添加全连接层,将卷积特征图展平为一维向量,并通过全连接层进行分类。

4.编译和训练模型

  • 使用adam优化器和稀疏分类交叉熵损失函数编译模型。
  • 训练模型,设定训练次数(epochs)为5,并使用测试数据进行验证。

这个模型的作用是什么呢?

其实这是一个卷积神经网络(CNN),它的主要作用是用于图像分类任务。具体来说,它被设计用于对输入的灰度图像(28x28像素)进行分类。这个示例模型通常用于像MNIST手写数字识别这样的任务,但可以推广到其他类似的图像分类任务。

用途:进行图像分类

  • 模型接收输入图像,并将其分类为预定义的类别。例如,在MNIST数据集上,它将输入的手写数字图像分类为0到9之间的一个数字。

 接下来进行代码具体讲解

1. 卷积层
  • 作用:提取图像中的局部特征。
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))

Conv2D:应用32个3x3的卷积核(滤波器)到输入图像,提取特征。ReLU激活函数用于引入非线性。

2. 池化层
  • 作用:降低特征图的维度,减少计算量,提取重要特征。
    model.add(layers.MaxPooling2D((2, 2)))
    

    MaxPooling2D:应用2x2的池化窗口,取局部区域的最大值,进行下采样。

3. 叠加更多的卷积层和池化层
  • 作用:逐步提取更高级别、更抽象的特征。
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    
4. 全连接层
  • 作用:将提取的特征用于分类。
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    
  • Flatten:将卷积层输出的多维特征图展平为一维向量。
  • Dense:全连接层,64个神经元,ReLU激活函数。
  • Dense:输出层,10个神经元(对应10个分类),softmax激活函数用于输出类别概率。

5.模型的训练和评估

编译模型

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  • Adam优化器:自适应学习率优化算法,用于更新模型权重。
  • 稀疏分类交叉熵损失函数:用于多分类问题的损失计算。
  • 准确率指标:用于评估模型性能。

6.训练模型: 

model.fit(train_images, train_labels, epochs=5, validation_data=(test_images, test_labels))

7. 评估模型

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"Test accuracy: {test_acc}")

 输出测试准确率

这个模型通过多层卷积和池化操作提取图像的特征,并通过全连接层进行分类。其主要作用是识别和分类输入的图像,常用于手写数字识别等图像分类任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值