边写代码边学习之卷积神经网络CNN

这篇具有很好参考价值的文章主要介绍了边写代码边学习之卷积神经网络CNN。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 卷积神经网络CNN

卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络的架构,主要用于图像识别、图像分类和计算机视觉等任务。它是由多层神经元组成的神经网络,其中包含卷积层、池化层和全连接层等组件。

CNN的设计受到了生物视觉系统的启发,其中最重要的组件是卷积层。卷积层通过使用一系列称为卷积核(或过滤器)的小矩阵,对输入图像进行卷积操作。这个卷积操作可以理解为滑动窗口在输入图像上的移动,对窗口中的图像部分和卷积核进行逐元素相乘并相加,从而生成输出特征图。这个过程可以有效地提取输入图像中的局部特征,例如边缘、纹理等信息。

随后,通常会应用池化层来降低特征图的空间维度,减少模型中的参数数量,以及提取更加抽象的特征。常见的池化操作包括最大池化和平均池化,它们分别选择局部区域中的最大值或平均值作为池化后的值。

最后,通过一个或多个全连接层对池化后的特征进行处理,将其映射到特定的输出类别。全连接层通常是传统的神经网络结构,其输出用于执行分类、回归或其他任务。

卷积神经网络在图像处理领域表现出色,因为它们能够自动从原始像素中学习特征,并且能够处理大量数据,从而实现较高的准确性。在过去的几年里,CNN在计算机视觉和其他领域的许多任务上取得了显著的突破,成为深度学习的重要组成部分。

2. tf.keras.layers.Conv1D

边写代码边学习之卷积神经网络CNN,学习,cnn,人工智能

tf.keras.layers.Conv1D(
    filters,
    kernel_size,
    strides=1,
    padding="valid",
    data_format="channels_last",
    dilation_rate=1,
    groups=1,
    activation=None,
    use_bias=True,
    kernel_initializer="glorot_uniform",
    bias_initializer="zeros",
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

一维卷积层(例如时间卷积(temporal convolution))。

该层创建一个卷积核,该卷积核与单个空间(或时间)维度上的层输入进行卷积,以产生输出张量。 如果 use_bias 为 True,则创建偏差向量并将其添加到输出中。 最后,如果激活不是 None,它也会应用于输出。

当将此层用作模型中的第一层时,请提供 input_shape 参数(整数元组或 None,例如 (10, 128) 表示 10 个 128 维向量的向量序列,或 (None, 128) 表示可变长度 128 维向量的序列。

3. 例子

3.1 简单的一层卷积网络

定义一个一维的卷积,卷积核的shape的(,2),输入的shape是(None, 1)。 biase没有,filter是1.  

定义输入数据和卷积核,然后输入到卷积网络中,输出结果。

def case1():
    # Create a Conv1D model
    model = tf.keras.Sequential([
        tf.keras.layers.Conv1D(filters=1, kernel_size=2, activation='linear', use_bias=False,
                               input_shape=(None, 1)),
    ])
    model.summary()

    # Input sequence and filter
    input_sequence = np.array([1, 2, 3, 4, 5, 6])
    filter_kernel = np.array([2, -1])

    # Reshape the input sequence and filter to fit Conv1D
    input_sequence = input_sequence.reshape(1, -1, 1)
    filter_kernel = filter_kernel.reshape(-1, 1, 1)

    # Set the weights of the Conv1D layer to the filter_kernel
    model.layers[0].set_weights([filter_kernel])

    # Perform 1D Convolution
    output_sequence = model.predict(input_sequence).flatten()

    print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)
    print("Filter:", filter_kernel.flatten(), " shape :",filter_kernel.shape )
    print("Output Sequence:", output_sequence)

if __name__ == '__main__':
    case1()

输出

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, None, 1)           2         
                                                                 
=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________
1/1 [==============================] - 0s 121ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [0. 1. 2. 3. 4.]

Process finished with exit code 0

3.2 . 自定激活函数

为了验证激活函数是在卷积后调用, 特写下面代码。你们可以根据输入和输出做校验。

def case_custom_activation():
    # Input sequence and filter
    input_sequence = np.array([1, 2, 3, 4, 5, 6])
    filter_kernel = np.array([2, -1])

    # Reshape the input sequence and filter to fit Conv1D
    input_sequence = input_sequence.reshape(1, -1, 1)
    filter_kernel = filter_kernel.reshape(-1, 1, 1)

    def custom_activation(x):
        # return tf.square(tf.nn.tanh(x))
        return tf.square(x)

    # Create a Conv1D model
    model = keras.Sequential([
        keras.layers.Conv1D(filters=1, kernel_size=2, activation=custom_activation, use_bias=False,
                               input_shape=(None, 1)),
    ])

    model.summary()

    # Set the weights of the Conv1D layer to the filter_kernel
    model.layers[0].set_weights([filter_kernel])

    # Perform 1D Convolution
    output_sequence = model.predict(input_sequence).flatten()

    print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)
    print("Filter:", filter_kernel.flatten(), " shape :",filter_kernel.shape )
    print("Output Sequence:", output_sequence)

if __name__ == '__main__':
    case_custom_activation()

输出

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, None, 1)           2         
                                                                 
=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________
1/1 [==============================] - 0s 57ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [ 0.  1.  4.  9. 16.]

3.3. 验证偏置

和上面代码唯一不同是,定义了偏置。

def cnn1d_biase():
    # Input sequence and filter
    input_sequence = np.array([1, 2, 3, 4, 5, 6])
    filter_kernel = np.array([2, -1])
    biase = np.array([2])

    # Reshape the input sequence and filter to fit Conv1D
    input_sequence = input_sequence.reshape(1, -1, 1)
    filter_kernel = filter_kernel.reshape(-1, 1, 1)

    def custom_activation(x):
        # return tf.square(tf.nn.tanh(x))
        return tf.square(x)

    # Create a Conv1D model
    model = keras.Sequential([
        keras.layers.Conv1D(filters=1, kernel_size=2, activation=custom_activation,
                               input_shape=(None, 1)),
    ])

    model.summary()

    print(model.layers[0].get_weights()[0].shape)
    print(model.layers[0].get_weights()[1].shape)

    # Set the weights of the Conv1D layer to the filter_kernel
    model.layers[0].set_weights([filter_kernel, biase])

    # Perform 1D Convolution
    output_sequence = model.predict(input_sequence).flatten()

    print("Input Sequence:", input_sequence.flatten(), "shape:", input_sequence.shape)
    print("Filter:", filter_kernel.flatten(), " shape :", filter_kernel.shape)
    print("Output Sequence:", output_sequence)


if __name__ == '__main__':
    cnn1d_biase()

输出文章来源地址https://www.toymoban.com/news/detail-614939.html

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv1d (Conv1D)             (None, None, 1)           3         
                                                                 
=================================================================
Total params: 3
Trainable params: 3
Non-trainable params: 0
_________________________________________________________________
(2, 1, 1)
(1,)
1/1 [==============================] - 0s 60ms/step
Input Sequence: [1 2 3 4 5 6] shape: (1, 6, 1)
Filter: [ 2 -1]  shape : (2, 1, 1)
Output Sequence: [ 4.  9. 16. 25. 36.]

Process finished with exit code 0

到了这里,关于边写代码边学习之卷积神经网络CNN的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法)——python代码

    深度学习之卷积神经网络中常用模型评估指标(混淆矩阵,精确率,召回率,特异度计算方法): 混淆矩阵,精确率,召回率,特异度作为卷积神经网络的模型性能评价指标,它们的计算和绘制具有非常重要的意义,特别是在写论文的时候,我们往往需要这些指标来证明我们模

    2024年02月06日
    浏览(59)
  • 机器学习之卷积神经网络

    卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一。卷积神经网络具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此又称为SIANN。卷积神经网络仿照生物的视知觉机制构建,可以进行监督学习和非监督学习

    2024年01月18日
    浏览(32)
  • 深度学习之卷积神经网络(CNN)

          大家好,我是带我去滑雪!       卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度学习的前馈神经网络,主要用于 图像 和 视频识别 、 分类 、 分割 和 标注 等计算机视觉任务。它主要由 卷积层 、 池化层 、 全连接层 和 激活函数层 等组成。其中,卷积

    2024年02月05日
    浏览(50)
  • TensorFlow学习之:了解和实践卷积神经网络和序列模型

    学习CNN的结构和原理,了解如何用TensorFlow实现CNN。 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中的一种强大的模型架构,特别适合于处理图像数据。CNN通过使用卷积层自动地从图像中学习空间层级的特征,这使得它们在图像分类、物体检测、图像分割等计算机视

    2024年04月17日
    浏览(32)
  • 机器学习之计算机视觉中的深度学习:卷积神经网络介绍

    文章代码来源:《deep learning on keras》,非常好的一本书,大家如果英语好,推荐直接阅读该书,如果时间不够,可以看看此系列文章。 在这一章,我们会学习卷积神经网络,一种在计算机视觉中常用的深度学习模型,你将会学着将它们运用到分类问题中。 我们首先会介绍卷

    2024年02月04日
    浏览(67)
  • 【探索AI】十八 深度学习之第3周:卷积神经网络(CNN)(二)-常见的卷积层、池化层与全连接层

    卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习算法,特别适用于处理图像相关的任务。CNN通过模拟人脑视觉皮层的层次化结构,实现了对图像的高效特征提取和分类。下面将详细介绍CNN的基本原理和结构,包括卷积层、池化层和全连接层的作用和位置。 卷积层

    2024年04月16日
    浏览(42)
  • 卷积神经网络模型之——AlexNet网络结构与代码实现

    AlexNet原文地址:https://proceedings.neurips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf AlexNet诞生于2012年,由2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。 AlexNet的贡献点: 首次使用GPU加速网络训练 使用ReLU激活函数,代替不是传统的Sigmoid和Tanh,解决了Sigmo

    2024年02月08日
    浏览(43)
  • 72.全卷积神经网络(FCN)及代码实现

    语义分割是对图像中的每个像素分类 。 全卷积网络( fully convolutional network,FCN )采用卷积神经网络实现了从 图像像素到像素类别的变换 。 与我们之前在图像分类或目标检测部分介绍的卷积神经网络不同,全卷积网络 将中间层特征图的高和宽变换回输入图像的尺寸 :这是

    2024年02月05日
    浏览(39)
  • 动手学深度学习—卷积神经网络(原理解释+代码详解)

    多层感知机对图像处理是百万维度,模型不可实现。 如果要在图片中找到某个物体,寻找方法应该和物体位置无关。 适合 计算机视觉 的神经网络架构: 平移不变性 :不管检测对象出现在图像中的哪个位置,神经网络前几层应该对相同图像区域有相似的反应。 局部性 :神

    2024年02月14日
    浏览(51)
  • 卷积神经网络轻量化教程之通道剪枝【附代码】

    这两天自己手写了一个可以简单实现通道剪枝的代码,在这篇文章中也会对代码进行讲解,方便大家在自己代码中的使用。 如果还想学习YOLO系列的剪枝代码,可以参考我其他文章,下面的这些文章都是我根据通道剪枝的论文在YOLO上进行的实现,而本篇文章是我自己写的,也

    2024年02月05日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包