最近在学习YOLO
其中会接触到TF中的函数
所以在此处做记录
tf.pad()函数主要是对张量在各个维度上进行填充,该函数的参数如下所示:
pad(
tensor,
paddings,
mode='CONSTANT',
name=None
)
tensor是待填充的张量
paddings指出要给tensor的哪个维度进行填充,以及填充方式,要注意的是paddings的rank必须和tensor的rank相同
mode指出用什么进行填充,’CONSTANT’表示用0进行填充(总共有三种填充方式,本文用CONSTANT予以说明pad函数功能)
name就是这个节点的名字了
tf.layers这个模块主要覆盖的区域是全连接和卷积等等的基本操作
Input(…): 用于实例化一个输入 Tensor,作为神经网络的输入。
average_pooling1d(…): 一维平均池化层
average_pooling2d(…): 二维平均池化层
average_pooling3d(…): 三维平均池化层
batch_normalization(…): 批量标准化层
conv1d(…): 一维卷积层
conv2d(…): 二维卷积层
conv2d_transpose(…): 二维反卷积层
conv3d(…): 三维卷积层
conv3d_transpose(…): 三维反卷积层
dense(…): 全连接层
dropout(…): Dropout层
flatten(…): Flatten层,即把一个 Tensor 展平
max_pooling1d(…): 一维最大池化层
max_pooling2d(…): 二维最大池化层
max_pooling3d(…): 三维最大池化层
separable_conv2d(…): 二维深度可分离卷积层
tf.layers.batch_normalization此方法是批量标准化的方法,经过处理之后可以加速训练速度
tf.layers.batch_normalization(
inputs,
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer=tf.zeros_initializer(),
gamma_initializer=tf.ones_initializer(),
moving_mean_initializer=tf.zeros_initializer(),
moving_variance_initializer=tf.ones_initializer(),
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
training=False,
trainable=True,
name=None,
reuse=None,
renorm=False,
renorm_clipping=None,
renorm_momentum=0.99,
fused=None,
virtual_batch_size=None,
adjustment=None
)
inputs必需,即输入数据。
axis: 一个整形或者一个整形列表。表示将要使用BN的轴。举个例子, 要是在一个数据格式为"channels_first" 2D卷积层的后面,那么设置set axis=1,否则设置axis=3. 要是提供了一个列表,那么列表中所有的维度都会被同时被BN。
Note: when using multi-axis batch norm, the beta, gamma, moving_mean, and moving_variance variables are the same rank as the input Tensor, with dimension size 1 in all reduced (non-axis) dimensions).
momentum: 滑动平均的Momentum.
epsilon: 可选,默认 0.001,大于0的小浮点数,用于防止除0错误。
center: 可选,默认 True,若设为True,将会将 beta 作为偏置加上去,否则忽略参数 beta
scale: 可选,默认 True,若设为True,则会乘以gamma,否则不使用gamma。当下一层是线性的时,可以设False,因为scaling的操作将被下一层执行。
beta_initializer: 可选,默认 zeros_initializer,即 beta 权重的初始方法。
gamma_initializer: 可选,默认 ones_initializer,即 gamma 的初始化方法。
moving_mean_initializer: 可选,默认 zeros_initializer,即动态均值的初始化方法。
moving_variance_initializer: 可选,默认 ones_initializer,即动态方差的初始化方法。
beta_regularizer: 可选,默认None,beta 的正则化方法。
gamma_regularizer: 可选,默认None,gamma 的正则化方法。
**beta_constraint:**可选,默认None,加在 beta 上的约束项。
gamma_constraint: 可选,默认None,加在 gamma 上的约束项。
renorm: 可选,默认 False,是否要用 Batch Renormalization (https://arxiv.org/abs/1702.03275).
renorm_clipping: 可选,默认 None,是否要用 rmax、rmin、dmax 来 scalar Tensor。
renorm_momentum: 可选,默认 0.99,用来更新动态均值和标准差的 Momentum 值。
fused:可选,默认 None,是否使用一个更快的、融合的实现方法。
trainable: 可选,默认 False,返回结果是 training 模式。
virtual_batch_size:可选,默认 None,是一个 int 数字,指定一个虚拟 batch size。
adjustment: 可选,默认 None,对标准化后的结果进行适当调整的方法。
name: A string, the name of the layer.
tf.layers.conv2d:2D 卷积层的函数接口。
这个层创建了一个卷积核,将输入进行卷积来输出一个 tensor。如果 use_bias 是 True(且提供了 bias_initializer),则一个偏差向量会被加到输出中。最后,如果 activation 不是 None,激活函数也会被应用到输出中。
conv2d(inputs, filters, kernel_size,
strides=(1, 1),
padding='valid',
data_format='channels_last',
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=<tensorflow.python.ops.init_ops.Zeros object at 0x000002596A1FD898>,
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None,
reuse=None)
inputs
:Tensor 输入
filters
:整数,表示输出空间的维数(即卷积过滤器的数量)
kernel_size
:一个整数,或者包含了两个整数的元组/队列,表示卷积窗的高和宽。如果是一个整数,则宽高相等。
strides
:一个整数,或者包含了两个整数的元组/队列,表示卷积的纵向和横向的步长。如果是一个整数,则横纵步长相等。另外, strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。
padding
:“valid” 或者 “same”(不区分大小写)。“valid” 表示不够卷积核大小的块就丢弃,"same"表示不够卷积核大小的块就补0。
“valid” 的输出形状为
L n e w s = c e i l ( L − F + 1 S ) L_{news} = ceil(\frac{L-F+1}{S}) Lnews=ceil(SL−F+1)
“same” 的输出形状为
L
n
e
w
s
=
c
e
i
l
(
L
S
)
L_{news} = ceil(\frac{L}{S})
Lnews=ceil(SL)
其中,LLL 为输入的 size(高或宽),FFF 为 filter 的 size,SSS 为 strides 的大小,ceil()ceil()ceil() 为向上取整。
data_format
:channels_last
或者 channels_first
,表示输入维度的排序。
`channels_last` corresponds to inputs with shape;
`(batch, height, width, channels)` while `channels_first` corresponds to inputs with shape `(batch, channels, height, width)`.
dilation_rate
:一个整数,或者包含了两个整数的元组/队列,表示使用扩张卷积时的扩张率。如果是一个整数,则所有方向的扩张率相等。另外, strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。
activation
:激活函数。如果是None则为线性函数。
use_bias
:Boolean类型,表示是否使用偏差向量。
kernel_initializer
:卷积核的初始化。
bias_initializer
:偏差向量的初始化。如果是None,则使用默认的初始值。
kernel_regularizer
:卷积核的正则项
bias_regularizer
:偏差向量的正则项
activity_regularizer
:输出的正则函数
kernel_constraint
:映射函数,当核被Optimizer更新后应用到核上。Optimizer 用来实现对权重矩阵的范数约束或者值约束。映射函数必须将未被影射的变量作为输入,且一定输出映射后的变量(有相同的大小)。做异步的分布式训练时,使用约束可能是不安全的。
bias_constraint
:映射函数,当偏差向量被Optimizer更新后应用到偏差向量上。
trainable
:Boolean类型。
name
:字符串,层的名字。
reuse
:Boolean类型,表示是否可以重复使用具有相同名字的前一层的权重。
##返回值
输出 Tensor
##异常抛出
ValueError:if eager execution is enabled.
参考:
[1]https://blog.csdn.net/xierhacker/article/details/82747919
[2]https://blog.csdn.net/HappyRocking/article/details/80243790?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase