tensorflow卷积核的两种实现方式: tf.nn.conv2d 和 tf.layers.conv2d

参考链接:https://stackoverflow.com/questions/42785026/tf-nn-conv2d-vs-tf-layers-conv2d

定义

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=init_ops.zeros_initializer(), 
                    kernel_regularizer=None, 
                    bias_regularizer=None, 
                    activity_regularizer=None, trainable=True, 
                    name=None, reuse=None)
tf.nn.conv2d(input, filter, strides, padding, 
            use_cudnn_on_gpu=None, data_format=None, name=None)

对于卷积来说,两者作用是一样的。最大的区别在于:

  • layers中  filters:一个整数,代表滤波器的个数,也就是卷积核数或者输出空间的维数
  • nn中        filter:  一个四维张量,[filter_height, filter_width, in_channels, out_channels]

相当于nn中的filter在layers中被拆成了filters和kernel_size两个参数。

此外:

  • layers更适合从头到尾训练模型,因为activation和bias自动实现,而nn则需要你显示地创建placeholder并进行相关计算
  • nn更适合加载已经预训练好的模型,因为filter由tf.Variable生成,在加载预训练的权值时更快
  • nn可以用权重衰减(因为权重矩阵是你显示定义的,layers中根据参数为你自动定义weights)如下:
kernel = _variable_with_weight_decay('weights',
                                         shape=[5, 5, 3, 64],
                                         stddev=5e-2,
                                         wd=0.0)
conv = tf.nn.conv2d(images, kernel, [1, 1, 1, 1], padding='SAME')

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值