keras.layers.Conv2D() 函数参数

本文详细介绍了TensorFlow库中Conv2D层的使用,包括参数filters、kernel_size、strides、padding等,以及它们如何影响输出张量的形状。还讨论了激活函数、数据格式和dilation_rate的作用,并通过实例展示了不同参数设置下的输出结果。了解这些概念对于理解和构建卷积神经网络至关重要。
TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

tf.keras.layers.Conv2D() 函数

Conv2D (二维卷积层)

这一层创建了一个卷积核,它与这一层的输入卷积以产生一个输出张量

当使用此层作为模型的第一层时,提供关键字参数 input_shape (整数元组,不包括样本轴,不需要写batch_size)

def __init__(self, filters,
             kernel_size,
             strides=(1, 1),
             padding='valid',
             data_format=None,
             dilation_rate=(1, 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):

参数

filters

int 类型,表示卷积核个数,filters 影响的是最后输入结果的的第四个维度的变化

import tensorflow as tf
from tensorflow.keras.layers import Conv2D

input_shape = (4, 600, 600, 3)
input = tf.random.normal(input_shape)
x = keras.layers.Conv2D(64, (1, 1), strides=(1, 1), name='conv1')(input)
print(x.shape)

OUTPUT:
(4, 600, 600, 64)

kernel_size

表示卷积核的大小,如果是方阵可以直接写成一个数,影响的是输出结果中间两个数据的维度

x = Conv2D(64, (2, 2), strides=(1, 1), name='conv1')(input)
#or Conv2D(64, 2, strides=(1, 1), name='conv1')(input)
print(x.shape)

OUTPUT:
(4, 599, 599, 64)

strides

tuple (int, int) 步长,同样会影响输出的中间两个维度,值得注意的是,括号里的数据可以不一致,分别控制横坐标和纵坐标

x = Conv2D(64, 1, strides=(2, 2), name='conv1')(input)
print(x.shape)

OUTPUT:
(4, 300, 300, 64)

padding

是否对周围进行填充,same 即使通过 kernel_size 缩小了维度,但是四周会填充 0,保持原先的维度;valid 表示存储不为 0 的有效信息

a = Conv2D(64, 1, strides=(2, 2), padding="same" , name='conv1')(input)
b = Conv2D(64, 3, strides=(2, 2), padding="same" , name='conv1')(input)
c = Conv2D(64, 3, strides=(1, 1), padding="same" , name='conv1')(input)
d = Conv2D(64, 3, strides=(1, 1), padding="valid", name='conv1')(input)
print(a.shape, b.shape, c.shape, d.shape)

OUTPUT:
(4, 300, 300, 64)
(4, 300, 300, 64)
(4, 600, 600, 64)
(4, 598, 598, 64)

activation

激活函数,如果 activation 不是 None,则它会应用于输出


use_bias

boolean,表示是否使用偏置量,如果 use_bias 为真,则创建一个偏置项并添加到输出中


data_format

用于规定 input_shape 的格式

如果不填写,默认是 channels_last,否则可以填写 channels_first。前者的会把 input_shape 这个三元组给识别成 (batch_size, height, width, channels),后者则会识别成 (batch_size, channels, height, width) 不过样本轴 (batch_size) 不需要自己填写


dilation_rate

int, tuple(int, int), list[int, int],指定用于扩展卷积的扩展率。可以是单个整数,为所有空间维度指定相同的值。该参数定义了卷积核处理数据时各值的间距。

在相同的计算条件下,该参数提供了更大的感受野。该参数经常用在实时图像分割中。当网络层需要较大的感受野,但计算资源有限而无法提高卷积核数量或大小时,可以考虑使用。



返回值

返回一个四维的张量

第一个数是 batch 的大小,也就是有几组数据;后三个数表示一个张量的大小





同步更新于:SP-FA 的博客


您可能感兴趣的与本文相关的镜像

TensorFlow-v2.9

TensorFlow-v2.9

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

Keras中的Conv2D层用于图像空间的2维卷积。其函数原型如下: ```python keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 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) ``` 各参数说明如下: - `filters`:卷积核的数目,即输出的维度[^3][^4]。 - `kernel_size`:过滤器的大小,通常是一个二元组,如`(3, 3)`表示3x3的卷积核[^3][^4]。 - `strides`:步长,默认为`(1, 1)`,表示在水平和垂直方向上的移动步长[^3][^4]。 - `padding`:边界处理方式,`'valid'`表示不进行填充,`'same'`表示填充使得输出和输入具有相同的空间尺寸,默认为`'valid'`[^3][^4]。 - `data_format`:数据格式,`None`表示使用默认格式,通常为`'channels_last'`,即数据形状为`(batch_size, height, width, channels)`[^3][^4]。 - `dilation_rate`:膨胀率,默认为`(1, 1)`,用于控制卷积核中元素之间的间距[^3][^4]。 - `activation`:激活函数,默认为`None`,即不使用激活函数[^3][^4]。 - `use_bias`:是否使用偏置量,布尔值,默认为`True`[^3][^4]。 - `kernel_initializer`:卷积核的初始化方法,默认为`'glorot_uniform'`[^3][^4]。 - `bias_initializer`:偏置量的初始化方法,默认为`'zeros'`[^3][^4]。 - `kernel_regularizer`:卷积核的正则化方法,默认为`None`[^3][^4]。 - `bias_regularizer`:偏置量的正则化方法,默认为`None`[^3][^4]。 - `activity_regularizer`:输出的正则化方法,默认为`None`[^3][^4]。 - `kernel_constraint`:卷积核的约束条件,默认为`None`[^3][^4]。 - `bias_constraint`:偏置量的约束条件,默认为`None`[^3][^4]。 以下是一个使用`Conv2D`层的应用示例: ```python import tensorflow as tf # 设置训练模型 # input_shape 指出输入的形状(samples, rows, cols, channels),只指出后三维即可,第一维度按batch_size自动指定 # 这里假设输入是28x28的单通道图像 model = tf.keras.Sequential([ tf.keras.layers.Conv2D(filters=16, kernel_size=(5, 5), activation="relu", input_shape=(28, 28, 1), padding="valid") ]) ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SP FA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值