📜  Python Tensorflow – tf.keras.layers.Conv2D()函数

📅  最后修改于: 2022-05-13 01:54:57.027000             🧑  作者: Mango

Python Tensorflow – tf.keras.layers.Conv2D()函数

在本文中,我们将深入了解 tf.keras.layers.Conv2D() 在Python编程语言中的使用。

卷积神经网络:CNN

计算机视觉通过训练具有大数据的机器来模仿人类视觉,正在改变世界。卷积神经网络 (CNN) 是一种特定类型的人工神经网络,它使用感知器/计算机图,这是一种用于分析数据的机器学习单元算法。该数据主要涉及图像。 3D 向量维度通过特征映射,然后使用池化技术对其进行下采样。广泛使用的对图像特征图进行下采样的池化技术是 MaxPooling 和 MeanPooling。

CNN的应用:

卷积神经网络广泛应用于计算机视觉技术,主要应用包括:

  • 物体检测
  • 分类:乳腺癌预测
  • 语义分割
  • 自动驾驶
  • 概率控制

Keras 中的 CNN 实现:tk.keras.layers.Conv2D()

Conv2D 的类结构:

tk.keras.layers.Conv2D() 过滤器的常用参数,kernel_size,strides,padding,activation。

      Arguments            

Meaning

filtersThe number of output filters in the convolution i.e., total feature maps
kernel_sizeA tuple or integer value specifying the height and width of the 2D convolution window
stridesAn integer or tuple/list of 2 integers, specifying the strides of the convolution along with the height and width.
padding“valid” means no padding. “same” means output has the same size as the input.
activationNon-Linear functions [relu, softmax, sigmoid, tanh]
use_biasBoolean, whether the layer uses a bias vector.
dilation_ratean integer or tuple/list of 2 integers, specifying the dilation rate to use for dilated convolution. 
kernel_initializerDefaults to ‘glorot_uniform’.
bias_initializer The initializer for the bias vector
kernel_constraintConstraint function applied to the kernel matrix
bias_constraintConstraint function applied to the bias vector

使用 Tensorflow 的卷积神经网络:

卷积神经网络是一种广泛使用的深度学习算法。使用 CNN 的主要目的是缩小输入形状。在下面的示例中,我们采用 4 维图像像素,总共 50 个 64 像素的图像数据。由于我们知道图像是由三种颜色即RGB组成的,因此4值3表示彩色图像。

在将输入图像像素传递给 Conv2D 时,它会缩小输入大小。

例子:

Python3
import tensorflow as tf
import tensorflow.keras as keras
 
image_pixel = (50,64,64,3)
cnn_feature = tf.random.normal(image_pixel)
cnn_label = keras.layers.Conv2D(2, 3, activation='relu',
                                input_shape=image_pixel[1:])(
  cnn_feature)
print(cnn_label.shape)


Python3
image_pixel = (50, 64, 64, 3)
cnn_feature = tf.random.normal(image_pixel)
cnn_label = keras.layers.Conv2D(
    2, 3, activation='relu',
  padding="same",
  input_shape=image_pixel[1:])(cnn_feature)
print(cnn_label.shape)


Python3
import tensorflow.keras as keras
 
 
def build_model():
    model = keras.Sequential(
        [
            # first convolution layer
            keras.layers.Conv2D(32, (3, 3), activation="relu",
                                input_shape=(32, 32, 3)),
            keras.layers.MaxPooling2D((2, 2), strides=2),
 
            # second convolution layer
            keras.layers.Conv2D(64, (3, 3), activation="relu"),
            keras.layers.MaxPooling2D((2, 2), strides=2),
 
            # fully connected classification
            # single vector
            keras.layers.Flatten(),
           
            # hidden layer and output layer
            keras.layers.Dense(1024, activation="relu"),
            keras.layers.Dense(10, activation="softmax")
        ])
    return model


输出:

(50, 62, 62, 2)

通过提供相同的填充参数,输入大小应保持不变。

Python3

image_pixel = (50, 64, 64, 3)
cnn_feature = tf.random.normal(image_pixel)
cnn_label = keras.layers.Conv2D(
    2, 3, activation='relu',
  padding="same",
  input_shape=image_pixel[1:])(cnn_feature)
print(cnn_label.shape)

输出:

(50, 64, 64, 2)

像素大小没有变化,因为我们提供了相同的填充。

实现 keras.layers.Conv2D() 模型:

将到目前为止所学的一切付诸实践。首先,我们创建一个 Keras 序列模型并创建一个具有 32 个大小为 (3,3) 的特征图的卷积层。 Relu 是使用激活,然后我们使用 MaxPooling 技术对数据进行下采样。我们通过将图像通过具有 64 个特征图的第二个卷积层来进一步缩小图像。这个过程称为特征提取。完成特征提取后,我们可以将数据展平为单个向量并将它们提供给隐藏的密集层。 softmax 激活用于输出层,以确保这些输出属于分类数据类型,这有助于图像分类。

Python3

import tensorflow.keras as keras
 
 
def build_model():
    model = keras.Sequential(
        [
            # first convolution layer
            keras.layers.Conv2D(32, (3, 3), activation="relu",
                                input_shape=(32, 32, 3)),
            keras.layers.MaxPooling2D((2, 2), strides=2),
 
            # second convolution layer
            keras.layers.Conv2D(64, (3, 3), activation="relu"),
            keras.layers.MaxPooling2D((2, 2), strides=2),
 
            # fully connected classification
            # single vector
            keras.layers.Flatten(),
           
            # hidden layer and output layer
            keras.layers.Dense(1024, activation="relu"),
            keras.layers.Dense(10, activation="softmax")
        ])
    return model

输出: