To implement 2D convolution operation, we can use tf.nn.conv2d(),here is the tutorial:
Understand tf.nn.conv2d(): Compute a 2-D Convolution in TensorFlow – TensorFlow Tutorial
However, we also can use tf.layers.conv2d() method. In this tutorial, we will use some examples to show you how to use it correctly.
Syntax
tf.layers.conv2d() is defined as:
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)
It can create a convolution netwrok based on filters and kernel_size.
Important Parameters
inputs: the input tensor, the shape of it is [batch, in_height, in_width, in_channels], which is same to tf.nn.conv2d().
filters: the dimensionality of the output. As a filter, the shape of it is [filter_height, filter_width, in_channels, out_channels] in tf.nn.conv2d().
In tf.layers.conv2d(), parameter filters = out_channels
kernel_size: an integer or a tuple / list. It is the height and width of the 2D convolution filter window.
For example:
if kernel_size = 3, it means filter_height = 3, filter_width = 3
if kernel_size = [3, 4], it means filter_height = 3, filter_width = 4
The relationship of filters and kernel_size between tf.nn.conv2d() and tf.layers.conv2d() is below:
We will use some examples to explain this.
How to use tf.layers.conv2d()?
Here is an example:
import tensorflow as tf import numpy as np g = tf.Variable(tf.truncated_normal([64, 40, 30, 200], stddev=0.1), name="inputs") K = 10 s = tf.layers.conv2d(g, K, 1, use_bias=True, kernel_initializer=None, name='assignment') init = tf.global_variables_initializer() init_local = tf.local_variables_initializer() with tf.Session() as sess: sess.run([init, init_local]) np.set_printoptions(precision=4, suppress=True) a =sess.run(s) print(a.shape) for n in tf.trainable_variables(): print(n)
Here, the input is g, the shape of it is [64, 40, 30, 200]. It means the batch = 64, in_height = 40, in_width=30, in_channels = 200
K is the filters in tf.layers.conv2d() 10, it means the out_channels = 10
kenerl_size is 1 in tf.layers.conv2d(), which means the height of width of filter is 1 in a convolution network.
Run this code, we will get:
(64, 40, 30, 10) <tf.Variable 'inputs:0' shape=(64, 40, 30, 200) dtype=float32_ref> <tf.Variable 'assignment/kernel:0' shape=(1, 1, 200, 10) dtype=float32_ref> <tf.Variable 'assignment/bias:0' shape=(10,) dtype=float32_ref>
We can find:
If we set K = 20, the kernel_size = [3, 30], here is the example:
import tensorflow as tf import numpy as np #5*4*10 g = tf.Variable(tf.truncated_normal([64, 40, 30, 200], stddev=0.1), name="inputs") K = 20 s = tf.layers.conv2d(g, K, [3, 30], use_bias=True, kernel_initializer=None, name='assignment')
Run this code, we will get:
(64, 38, 1, 20) <tf.Variable 'inputs:0' shape=(64, 40, 30, 200) dtype=float32_ref> <tf.Variable 'assignment/kernel:0' shape=(3, 30, 200, 20) dtype=float32_ref> <tf.Variable 'assignment/bias:0' shape=(20,) dtype=float32_ref>
From the result, we also can find: