参考链接:https://blog.csdn.net/gqixf/article/details/80519912
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。
data_format:channels_last 或者 channels_first,表示输入维度的排序。
dilation_rate:一个整数,或者包含了两个整数的元组/队列,表示使用扩张卷积时的扩张率。如果是一个整数,则所有方向的扩张率相等。另外, strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。
activation:激活函数。如果是None则为线性函数。一般用tf.nn.relu
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类型,表示是否可以重复使用具有相同名字的前一层的权重。
测试代码
import tensorflow as tf
# 输入是1张 3*3 大小的图片,图像通道数是1,这里默认像素全为1
input = tf.Variable(tf.ones([1,3,3,1]))
# 输出层数为1, 内核大小:2*2,步长1, 激活函数relu
op1 = tf.layers.conv2d(inputs=input, filters=1, kernel_size=[2, 2], strides=1, padding='SAME', activation=tf.nn.relu)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
result = sess.run(op1)
print("conv_shape:")
print(result.shape)
print("conv:")
print(result)
输出:
conv_shape:
(1, 3, 3, 1)
conv:
[[[[0.1565615 ]
[0.1565615 ]
[0.00818413]]
[[0.1565615 ]
[0.1565615 ]
[0.00818413]]
[[0. ]
[0. ]
[0. ]]]]