参考链接:https://stackoverflow.com/questions/42785026/tf-nn-conv2d-vs-tf-layers-conv2d
tf.nn.conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=True,
data_format='NHWC',
dilations=[1, 1, 1, 1],
name=None
)
input:输入数据
filter:过滤器
strides:卷积滑动步长,实际上可以解释为过滤器的大小
padding:图像边填充方式
tf.layers.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=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None,
reuse=None
)
对于卷积来说,两者作用是一样的。最大的区别在于:
- layers中 filters:一个整数,代表滤波器的个数,也就是卷积核数或者输出空间的维数
- nn中 filter: 一个四维张量,[filter_height, filter_width, in_channels, out_channels]
相当于nn中的filter在layers中被拆成了filters和kernel_size两个参数。
-
tf.layers.conv2d参数丰富,一般用于从头训练一个模型。其中activation和bias自动实现,而tf.nn.conv2d里需要显示的创建并进行相关计算。
- tf.nn.conv2d,一般在下载预训练好的模型时使用。在加载与训练的权值时更快。