Python Tensorflow – tf.keras.layers.Conv2D()函数
在本文中,我们将深入了解 tf.keras.layers.Conv2D() 在Python编程语言中的使用。
卷积神经网络:CNN
计算机视觉通过训练具有大数据的机器来模仿人类视觉,正在改变世界。卷积神经网络 (CNN) 是一种特定类型的人工神经网络,它使用感知器/计算机图,这是一种用于分析数据的机器学习单元算法。该数据主要涉及图像。 3D 向量维度通过特征映射,然后使用池化技术对其进行下采样。广泛使用的对图像特征图进行下采样的池化技术是 MaxPooling 和 MeanPooling。
CNN的应用:
卷积神经网络广泛应用于计算机视觉技术,主要应用包括:
- 物体检测
- 分类:乳腺癌预测
- 语义分割
- 自动驾驶
- 概率控制
Keras 中的 CNN 实现:tk.keras.layers.Conv2D()
Conv2D 的类结构:
tf.keras.layers.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.layers.Conv2D() 过滤器的常用参数,kernel_size,strides,padding,activation。 Arguments Meaningfilters The number of output filters in the convolution i.e., total feature maps kernel_size A tuple or integer value specifying the height and width of the 2D convolution window strides An 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. activation Non-Linear functions [relu, softmax, sigmoid, tanh] use_bias Boolean, whether the layer uses a bias vector. dilation_rate an integer or tuple/list of 2 integers, specifying the dilation rate to use for dilated convolution. kernel_initializer Defaults to ‘glorot_uniform’. bias_initializer The initializer for the bias vector kernel_constraint Constraint function applied to the kernel matrix bias_constraint Constraint 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
输出: