(inputs,
num_outputs,
kernel_size,
stride=1,
padding='SAME',
data_format=None,
rate=1,
activation_fn=None,
normalizer_fn=None,
normalizer_params=None,
weights_normalizer_fn=None,
weights_normalizer_params=None,
weights_initializer=tf.glorot_uniform_initializer(),
weights_regularizer=None,
biases_initializer=tf.zeros_initializer(),
biases_regularizer=None,
reuse=None,
trainable=True,
scope=None)
| 65 | |
| 66 | |
| 67 | def convolution(inputs, |
| 68 | num_outputs, |
| 69 | kernel_size, |
| 70 | stride=1, |
| 71 | padding='SAME', |
| 72 | data_format=None, |
| 73 | rate=1, |
| 74 | activation_fn=None, |
| 75 | normalizer_fn=None, |
| 76 | normalizer_params=None, |
| 77 | weights_normalizer_fn=None, |
| 78 | weights_normalizer_params=None, |
| 79 | weights_initializer=tf.glorot_uniform_initializer(), |
| 80 | weights_regularizer=None, |
| 81 | biases_initializer=tf.zeros_initializer(), |
| 82 | biases_regularizer=None, |
| 83 | reuse=None, |
| 84 | trainable=True, |
| 85 | scope=None): |
| 86 | with tf.variable_scope(scope, 'convolution', reuse=reuse): |
| 87 | conv_dims = inputs.shape.rank - 2 |
| 88 | kernel_size = kernel_size if isinstance(kernel_size, (list, tuple)) else [kernel_size] * conv_dims |
| 89 | stride = stride if isinstance(stride, (list, tuple)) else [stride] * conv_dims |
| 90 | rate = rate if isinstance(rate, (list, tuple)) else [rate] * conv_dims |
| 91 | if data_format is None or data_format.endswith('C'): |
| 92 | num_inputs = inputs.shape[-1] |
| 93 | elif data_format.startswith('NC'): |
| 94 | num_inputs = inputs.shape[1] |
| 95 | else: |
| 96 | raise ValueError('Invalid data_format') |
| 97 | |
| 98 | weights = tf.get_variable('weights', |
| 99 | shape=list(kernel_size) + [num_inputs, num_outputs], |
| 100 | initializer=weights_initializer, |
| 101 | regularizer=weights_regularizer, |
| 102 | trainable=trainable) |
| 103 | if weights_normalizer_fn is not None: |
| 104 | weights_normalizer_params = weights_normalizer_params or {} |
| 105 | weights = weights_normalizer_fn(weights, **weights_normalizer_params) |
| 106 | |
| 107 | outputs = tf.nn.convolution(input=inputs, |
| 108 | filter=weights, |
| 109 | dilation_rate=rate, |
| 110 | strides=stride, |
| 111 | padding=padding, |
| 112 | data_format=data_format) |
| 113 | |
| 114 | if normalizer_fn is not None: |
| 115 | normalizer_params = normalizer_params or {} |
| 116 | outputs = normalizer_fn(outputs, **normalizer_params) |
| 117 | else: |
| 118 | if biases_initializer is not None: |
| 119 | biases = tf.get_variable('biases', |
| 120 | shape=[num_outputs], |
| 121 | initializer=biases_initializer, |
| 122 | regularizer=biases_regularizer, |
| 123 | trainable=trainable) |
| 124 | outputs = tf.nn.bias_add(outputs, biases, data_format=data_format) |
nothing calls this directly
no test coverage detected