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

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

在这篇文章中,我们将深入了解tf.keras.layer.Conv2D()在python编程语言中的使用。

卷积神经网络CNN

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

Python Tensorflow - tf.keras.layer.Conv2D()函数

CNN的应用

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

  • Object Detection
  • 分类。乳腺癌的预测
  • Semantic Segmentation
  • Self-driving
  • Probability Control

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

Conv2D的类结构。

tf.keras.layer.Conv2D(filters, kernel_size, strides=(1, 1), padding="valid", data_format=None, dilation_rate=(1, 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)

tk.keras.layer.Conv2D()的常用参数是过滤器、kernel_size、strides、padding、激活。

参数 含义
滤波器 卷积中的输出滤波器的数量,即总的特征图。
kernel_size 一个元组或整数值,指定二维卷积窗口的高度和宽度。
strides 一个整数或两个整数的元组/列表,指定卷积的跨度以及高度和宽度。
padding “有效 “表示没有padding。”相同 “表示输出的大小与输入相同。
activation 非线性函数 [relu, softmax, sigmoid, tanh)
use_bias 布尔型,该层是否使用偏置向量。
dilation_rate 一个整数或2个整数的元组/列表,指定用于扩张卷积的扩张率。
kernel_initializer 默认为’glorot_uniform’。
bias_initializer 偏压向量的初始化器
kernel_constraint 适用于内核矩阵的约束函数
bias_constraint 适用于偏置向量的约束函数

使用Tensorflow的卷积神经网络

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

在将输入的图像像素传递给Conv2D时,它缩小了输入尺寸。

示例:

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)

输出:

(50, 62, 62, 2)

通过提供相同的padding参数,输入大小将保持不变。

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.layer.Conv2D()模型

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

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

输出:

<keras.engine.sequential.Sequential object at 0x7f436e8bc2b0>

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Tensorflow 教程