【问题标题】:What are the uses of layers in keras/Tensorflowkeras/Tensorflow中层的用途是什么
【发布时间】:2020-06-16 04:04:14
【问题描述】:

所以我是计算机视觉的新手,我真的不知道层在 keras 中的作用。在 keras 中添加层(密集、Conv2D 等)有什么用?他们添加了什么?

【问题讨论】:

    标签: tensorflow machine-learning keras computer-vision artificial-intelligence


    【解决方案1】:

    人工神经网络中的层是神经网络中以特定深度绑定在一起的一堆节点。 Keras 是一种高级 API,用于 TensorFlow 或 CNTK 等 NN 模块,以简化任务。一个 Keras 层包括 3 个主要部分:

    1. 输入层 - 包含原始数据
    2. 隐藏层 - 层的节点学习一些关于 输入的原始数据。它类似于抽象级别 形成一个神经网络。
    3. 输出层 - 由单个输出组成,主要是单个输出 节点,可以进行分类。

    Keras 作为一个整体由许多不同类型的层组成。卷积层创建一个内核,该内核在单个时间空间上与输入进行卷积以得出一组输出。池化层通过将地图中的特征简化为补丁来提供特征图的采样。 Max Pooling 和 Average Pooling 是 Pool 层中常用的方法。

    Keras 中其他常用的层有 Embedding 层、Noise 层和 Core 层。单个 NN 层只能表示线性可分离方法。大多数预测问题都很复杂,需要的不仅仅是一层。这就是需要多层概念的地方。

    我想我清除了您的疑虑以及您可以在https://www.tensorflow.org/api_docs/python/tf/keras 上看到的任何其他问题

    【讨论】:

      【解决方案2】:

      卷积神经网络有 4 个主要步骤:卷积、池化、展平和全连接。

      Conv2D()Conv3D() 等用于特征提取(这是一个卷积层)。

      池化层(MaxPool2D()AvgPool2D() 等)也用于特征提取(虽然它有不同的操作)。

      扁平化层(Flatten())将提取的特征图转换为向量,然后再输入全连接层(密集层)。

      密集层用于计算机视觉中的完全连接步骤,充当分类器(神经网络对从卷积层提取的每个特征进行分类。)

      还有Dropout()BatchNormalization()等优化层

      欲了解更多信息,只需打开 keras documentation。 如果你想开始学习卷积神经网络,this 文章可能会有所帮助。

      【讨论】:

        【解决方案3】:

        神经网络是当今自动化分类问题的绝佳工具。然而,在计算机视觉方面,输入数据量太大,无法通过简单的神经网络进行有效处理。

        为减少网络工作量,您需要对数据进行预处理并识别某些特征。为了找到图像中的特征,我们可以使用某些过滤器(如 sobel 边缘检测),这将突出分类所需的基本特征。 同样,对一张图像进行分类所需的过滤器数量过多,因此需要自动选择这些过滤器。

        这就是卷积层的用武之地。

        我们使用卷积层生成多个随机(最初)过滤器,这些过滤器将突出显示图像中的某些特征。在网络训练时,这些过滤器经过优化,可以更好地突出特征。

        在 TensorFlow 中,我们使用 Conv2D() 添加其中一层。参数示例为:Conv2D(64, 3, activation='relu')。 64 表示使用的过滤器数量,3 表示过滤器的大小(在本例中为 3x3),activation='relu' 表示activation function

        卷积层之后,我们使用池化层来进一步突出前一个卷积层产生的特征。在 Tensorflow 中,这通常使用MaxPooling2D() 完成,它采用过滤后的图像并每 2 个像素应用一个 2x2(默认情况下)层。 MaxPooling 应用的过滤器基本上是在该 2x2 区域中寻找最大值并将其添加到新图像中。

        我们可以多次使用这组卷积层和池化层,让网络更容易处理图像。

        在我们完成这些层之后,我们需要将输出传递给传统的(Dense)神经网络。

        为此,我们首先需要将图像数据从二维张量(矩阵)展平为一维张量(向量)。这是通过调用Flatten() 方法完成的。

        最后,我们需要添加我们的 Dense 层,用于在展平数据上进行训练。我们通过调用Dense() 来做到这一点。参数示例为Dense(64, activation='relu') 其中 64 是我们正在使用的节点数。

        这是我最近使用的一个示例 CNN 结构:

        # Build model
        model = tf.keras.models.Sequential()
        
        # Convolution and pooling layers
        model.add(tf.keras.layers.Conv2D(64, 3, activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 1))) # Input layer
        model.add(tf.keras.layers.MaxPooling2D())
        model.add(tf.keras.layers.Conv2D(64, 3, activation='relu'))
        model.add(tf.keras.layers.MaxPooling2D())
        
        # Flattened layers
        model.add(tf.keras.layers.Flatten())
        # Dense layers
        model.add(tf.keras.layers.Dense(64, activation='relu')) 
        model.add(tf.keras.layers.Dense(2, activation='softmax')) # Output layer
        

        当然,这适用于某个分类问题,层数和方法参数因问题而异。

        Youtube 频道 The Coding Train 有一个非常有用的视频,解释了 ConvolutionalPooling 层。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-28
          • 2017-12-12
          • 2018-08-24
          • 2021-03-30
          相关资源
          最近更新 更多