Similar to `tf.layers.Conv2D`, but with some differences: 1. Default kernel initializer is variance_scaling_initializer(2.0). 2. Default padding is 'same'. 3. Support 'split' argument to do group convolution. Variable Names: * ``W``: weights * ``b``: bias
(
inputs,
filters,
kernel_size,
strides=(1, 1),
padding='same',
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,
split=1)
| 21 | 'stride': 'strides', |
| 22 | }) |
| 23 | def Conv2D( |
| 24 | inputs, |
| 25 | filters, |
| 26 | kernel_size, |
| 27 | strides=(1, 1), |
| 28 | padding='same', |
| 29 | data_format='channels_last', |
| 30 | dilation_rate=(1, 1), |
| 31 | activation=None, |
| 32 | use_bias=True, |
| 33 | kernel_initializer=None, |
| 34 | bias_initializer=tf.zeros_initializer(), |
| 35 | kernel_regularizer=None, |
| 36 | bias_regularizer=None, |
| 37 | activity_regularizer=None, |
| 38 | split=1): |
| 39 | """ |
| 40 | Similar to `tf.layers.Conv2D`, but with some differences: |
| 41 | |
| 42 | 1. Default kernel initializer is variance_scaling_initializer(2.0). |
| 43 | 2. Default padding is 'same'. |
| 44 | 3. Support 'split' argument to do group convolution. |
| 45 | |
| 46 | Variable Names: |
| 47 | |
| 48 | * ``W``: weights |
| 49 | * ``b``: bias |
| 50 | """ |
| 51 | if kernel_initializer is None: |
| 52 | if get_tf_version_tuple() <= (1, 12): |
| 53 | kernel_initializer = tf.contrib.layers.variance_scaling_initializer(2.0) # deprecated |
| 54 | else: |
| 55 | kernel_initializer = tf.keras.initializers.VarianceScaling(2.0, distribution='untruncated_normal') |
| 56 | dilation_rate = shape2d(dilation_rate) |
| 57 | |
| 58 | if split == 1 and dilation_rate == [1, 1]: |
| 59 | # tf.layers.Conv2D has bugs with dilations (https://github.com/tensorflow/tensorflow/issues/26797) |
| 60 | with rename_get_variable({'kernel': 'W', 'bias': 'b'}): |
| 61 | layer = tf.layers.Conv2D( |
| 62 | filters, |
| 63 | kernel_size, |
| 64 | strides=strides, |
| 65 | padding=padding, |
| 66 | data_format=data_format, |
| 67 | dilation_rate=dilation_rate, |
| 68 | activation=activation, |
| 69 | use_bias=use_bias, |
| 70 | kernel_initializer=kernel_initializer, |
| 71 | bias_initializer=bias_initializer, |
| 72 | kernel_regularizer=kernel_regularizer, |
| 73 | bias_regularizer=bias_regularizer, |
| 74 | activity_regularizer=activity_regularizer, |
| 75 | _reuse=tf.get_variable_scope().reuse) |
| 76 | ret = layer.apply(inputs, scope=tf.get_variable_scope()) |
| 77 | ret = tf.identity(ret, name='output') |
| 78 | |
| 79 | ret.variables = VariableHolder(W=layer.kernel) |
| 80 | if use_bias: |
no test coverage detected