Python tensorflow.pad() Examples
The following are 30
code examples of tensorflow.pad().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
tensorflow
, or try the search function
.
![](https://www.programcreek.com/common/static/images/search.png)
Example #1
Source File: shake_shake.py From fine-lm with MIT License | 6 votes |
def shake_shake_skip_connection(x, output_filters, stride, is_training): """Adds a residual connection to the filter x for the shake-shake model.""" curr_filters = common_layers.shape_list(x)[-1] if curr_filters == output_filters: return x stride_spec = [1, stride, stride, 1] # Skip path 1. path1 = tf.nn.avg_pool(x, [1, 1, 1, 1], stride_spec, "VALID") path1 = tf.layers.conv2d( path1, int(output_filters / 2), (1, 1), padding="SAME", name="path1_conv") # Skip path 2. pad_arr = [[0, 0], [0, 1], [0, 1], [0, 0]] # First pad with 0's then crop. path2 = tf.pad(x, pad_arr)[:, 1:, 1:, :] path2 = tf.nn.avg_pool(path2, [1, 1, 1, 1], stride_spec, "VALID") path2 = tf.layers.conv2d( path2, int(output_filters / 2), (1, 1), padding="SAME", name="path2_conv") # Concat and apply BN. final_path = tf.concat(values=[path1, path2], axis=-1) final_path = tf.layers.batch_normalization( final_path, training=is_training, name="final_path_bn") return final_path
Example #2
Source File: dump_tfrecord.py From cwavegan with MIT License | 6 votes |
def _mapper(example_proto): features = { 'samples': tf.FixedLenSequenceFeature([1], tf.float32, allow_missing=True), 'label': tf.FixedLenSequenceFeature([], tf.string, allow_missing=True) } example = tf.parse_single_example(example_proto, features) wav = example['samples'][:, 0] wav = wav[:16384] wav_len = tf.shape(wav)[0] wav = tf.pad(wav, [[0, 16384 - wav_len]]) label = tf.reduce_join(example['label'], 0) return wav, label
Example #3
Source File: ops.py From Generative-Latent-Optimization-Tensorflow with MIT License | 6 votes |
def residual(input, num_filters, name, is_train, reuse=False, pad='REFLECT'): with tf.variable_scope(name, reuse=reuse): with tf.variable_scope('res1', reuse=reuse): out = residual_conv(input, num_filters, 3, 1, reuse, pad) out = tf.contrib.layers.batch_norm( out, center=True, scale=True, decay=0.9, is_training=is_train, updates_collections=None ) out = tf.nn.relu(out) with tf.variable_scope('res2', reuse=reuse): out = residual_conv(out, num_filters, 3, 1, reuse, pad) out = tf.contrib.layers.batch_norm( out, center=True, scale=True, decay=0.9, is_training=is_train, updates_collections=None ) return tf.nn.relu(input + out)
Example #4
Source File: probclass.py From imgcomp-cvpr with GNU General Public License v3.0 | 6 votes |
def pad_for_probclass3d(x, context_size, pad_value=0, learn_pad_var=False): """ :param x: NCHW tensorflow Tensor or numpy array """ input_is_tf = not isinstance(x, np.ndarray) if not input_is_tf and x.ndim == 3: # for bit_counter return remove_batch_dim(pad_for_probclass3d( add_batch_dim(x), context_size, pad_value, learn_pad_var)) with tf.name_scope('pad_cs' + str(context_size)): pad = context_size // 2 assert pad >= 1 if learn_pad_var: if not isinstance(pad_value, tf.Variable): print('Warn: Expected tf.Variable for padding, got {}'.format(pad_value)) return pc_pad_grad(x, pad, pad_value) pads = [[0, 0], # don't pad batch dimension [pad, 0], # don't pad depth_future, it's not seen by any filter [pad, pad], [pad, pad]] assert len(pads) == _get_ndims(x), '{} != {}'.format(len(pads), x.shape) pad_fn = tf.pad if input_is_tf else get_np_pad_fn() return pad_fn(x, pads, constant_values=pad_value)
Example #5
Source File: convolution.py From Automatic-Identification-and-Counting-of-Blood-Cells with GNU General Public License v3.0 | 6 votes |
def forward(self): pad = [[self.lay.pad, self.lay.pad]] * 2; temp = tf.pad(self.inp.out, [[0, 0]] + pad + [[0, 0]]) k = self.lay.w['kernels'] ksz = self.lay.ksize half = int(ksz / 2) out = list() for i in range(self.lay.h_out): row_i = list() for j in range(self.lay.w_out): kij = k[i * self.lay.w_out + j] i_, j_ = i + 1 - half, j + 1 - half tij = temp[:, i_ : i_ + ksz, j_ : j_ + ksz,:] row_i.append( tf.nn.conv2d(tij, kij, padding = 'VALID', strides = [1] * 4)) out += [tf.concat(row_i, 2)] self.out = tf.concat(out, 1)
Example #6
Source File: face_attack.py From Adversarial-Face-Attack with GNU General Public License v3.0 | 6 votes |
def structure(self, input_tensor): """ Args: input_tensor: NHWC """ rnd = tf.random_uniform((), 135, 160, dtype=tf.int32) rescaled = tf.image.resize_images( input_tensor, [rnd, rnd], method=tf.image.ResizeMethod.NEAREST_NEIGHBOR) h_rem = 160 - rnd w_rem = 160 - rnd pad_left = tf.random_uniform((), 0, w_rem, dtype=tf.int32) pad_right = w_rem - pad_left pad_top = tf.random_uniform((), 0, h_rem, dtype=tf.int32) pad_bottom = h_rem - pad_top padded = tf.pad(rescaled, [[0, 0], [pad_top, pad_bottom], [ pad_left, pad_right], [0, 0]]) padded.set_shape((input_tensor.shape[0], 160, 160, 3)) output = tf.cond(tf.random_uniform(shape=[1])[0] < tf.constant(0.9), lambda: padded, lambda: input_tensor) return output
Example #7
Source File: convolution.py From Traffic_sign_detection_YOLO with MIT License | 6 votes |
def forward(self): pad = [[self.lay.pad, self.lay.pad]] * 2; temp = tf.pad(self.inp.out, [[0, 0]] + pad + [[0, 0]]) k = self.lay.w['kernels'] ksz = self.lay.ksize half = int(ksz / 2) out = list() for i in range(self.lay.h_out): row_i = list() for j in range(self.lay.w_out): kij = k[i * self.lay.w_out + j] i_, j_ = i + 1 - half, j + 1 - half tij = temp[:, i_ : i_ + ksz, j_ : j_ + ksz,:] row_i.append( tf.nn.conv2d(tij, kij, padding = 'VALID', strides = [1] * 4)) out += [tf.concat(row_i, 2)] self.out = tf.concat(out, 1)
Example #8
Source File: spectrogram.py From spleeter with MIT License | 6 votes |
def pitch_shift( spectrogram, semitone_shift=0.0, method=tf.image.ResizeMethod.BILINEAR): """ Pitch shift a spectrogram preserving shape in tensorflow. Note that this is an approximation in the frequency domain. :param spectrogram: Input spectrogram to be pitch shifted as tensor. :param semitone_shift: (Optional) Pitch shift in semitone, default to 0.0. :param mehtod: (Optional) Interpolation method, default to BILINEAR. :returns: Pitch shifted spectrogram (same shape as spectrogram). """ factor = 2 ** (semitone_shift / 12.) T = tf.shape(spectrogram)[0] F = tf.shape(spectrogram)[1] F_ps = tf.cast(tf.cast(F, tf.float32) * factor, tf.int32)[0] ps_spec = tf.image.resize_images( spectrogram, [T, F_ps], method=method, align_corners=True) paddings = [[0, 0], [0, tf.maximum(0, F - F_ps)], [0, 0]] return tf.pad(ps_spec[:, :F, :], paddings, 'CONSTANT')
Example #9
Source File: problem.py From fine-lm with MIT License | 6 votes |
def pad_batch(features, batch_multiple): """Pad batch dim of features to nearest multiple of batch_multiple.""" feature = list(features.items())[0][1] batch_size = tf.shape(feature)[0] mod = batch_size % batch_multiple has_mod = tf.cast(tf.cast(mod, tf.bool), tf.int32) batch_padding = batch_multiple * has_mod - mod padded_features = {} for k, feature in features.items(): rank = len(feature.shape) paddings = [] for _ in range(rank): paddings.append([0, 0]) paddings[0][1] = batch_padding padded_feature = tf.pad(feature, paddings) padded_features[k] = padded_feature return padded_features
Example #10
Source File: common_attention.py From fine-lm with MIT License | 6 votes |
def get_shifted_center_blocks(x, indices): """Get right shifted blocks for masked local attention 2d. Args: x: A tensor with shape [batch, heads, height, width, depth] indices: The indices to gather blocks Returns: x_shifted: a tensor of extracted blocks, each block right shifted along length. """ center_x = gather_blocks_2d(x, indices) # Shift right along the length dimension def shift_right_2d_blocks(x): """Shift the second to last dimension of x right by one.""" shifted_targets = ( tf.pad(x, [[0, 0], [0, 0], [0, 0], [1, 0], [0, 0]])[:, :, :, :-1, :]) return shifted_targets x_shifted = shift_right_2d_blocks(center_x) return x_shifted
Example #11
Source File: common_attention.py From fine-lm with MIT License | 6 votes |
def _absolute_position_to_relative_position_masked(x): """Helper to dot_product_self_attention_relative_v2. Rearrange an attention logits or weights Tensor. The dimensions of the input represent: [batch, heads, query_position, memory_position] The dimensions of the output represent: [batch, heads, query_position, memory_position - query_position + length - 1] Only works with masked_attention. Undefined behavior for regions of the input where memory_position > query_position. Args: x: a Tensor with shape [batch, heads, length, length] Returns: a Tensor with shape [batch, heads, length, length] """ batch, heads, length, _ = common_layers.shape_list(x) x = tf.pad(x, [[0, 0], [0, 0], [1, 0], [0, 0]]) x = tf.reshape(x, [batch, heads, length, length + 1]) x = tf.slice(x, [0, 0, 0, 1], [batch, heads, length, length]) return x
Example #12
Source File: common_attention.py From fine-lm with MIT License | 6 votes |
def _relative_position_to_absolute_position_masked(x): """Helper to dot_product_self_attention_relative_v2. Rearrange an attention logits or weights Tensor. The dimensions of the input represent: [batch, heads, query_position, memory_position - query_position + length - 1] The dimensions of the output represent: [batch, heads, query_position, memory_position] Only works with masked_attention. Undefined behavior for regions of the input where memory_position > query_position. Args: x: a Tensor with shape [batch, heads, length, length] Returns: a Tensor with shape [batch, heads, length, length] """ batch, heads, length, _ = common_layers.shape_list(x) x = tf.pad(x, [[0, 0], [0, 0], [0, 0], [1, 0]]) x = tf.reshape(x, [batch, heads, 1 + length, length]) x = tf.slice(x, [0, 0, 1, 0], [-1, -1, -1, -1]) return x
Example #13
Source File: common_attention.py From fine-lm with MIT License | 6 votes |
def add_positional_embedding(x, max_length, name, positions=None): """Add positional embedding. Args: x: a Tensor with shape [batch, length, depth] max_length: an integer. static maximum size of any dimension. name: a name for this layer. positions: an optional tensor with shape [batch, length] Returns: a Tensor the same shape as x. """ _, length, depth = common_layers.shape_list(x) var = tf.cast(tf.get_variable(name, [max_length, depth]), x.dtype) if positions is None: sliced = tf.cond( tf.less(length, max_length), lambda: tf.slice(var, [0, 0], [length, -1]), lambda: tf.pad(var, [[0, length - max_length], [0, 0]])) return x + tf.expand_dims(sliced, 0) else: return x + tf.gather(var, tf.to_int32(positions))
Example #14
Source File: model_base.py From DOTA_models with Apache License 2.0 | 6 votes |
def _conv(self, x, kernel_size, filters, strides, is_atrous=False): """Convolution.""" padding = 'SAME' if not is_atrous and strides > 1: pad = kernel_size - 1 pad_beg = pad // 2 pad_end = pad - pad_beg if self._data_format == 'channels_first': x = tf.pad(x, [[0, 0], [0, 0], [pad_beg, pad_end], [pad_beg, pad_end]]) else: x = tf.pad(x, [[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]]) padding = 'VALID' return tf.layers.conv2d( inputs=x, kernel_size=kernel_size, filters=filters, strides=strides, padding=padding, use_bias=False, data_format=self._data_format)
Example #15
Source File: vgsl_model.py From DOTA_models with Apache License 2.0 | 6 votes |
def _PadLabels2d(logits_size, labels): """Pads or slices the 2nd dimension of 2-d labels to match logits_size. Covers the case of 1-d softmax output, when labels is [batch, seq] and logits is [batch, seq, onehot] Args: logits_size: Tensor returned from tf.shape giving the target size. labels: 2-d, but not necessarily matching in size. Returns: labels: Resized by padding or clipping the last dimension to logits_size. """ pad = logits_size - tf.shape(labels)[1] def _PadFn(): return tf.pad(labels, [[0, 0], [0, pad]]) def _SliceFn(): return tf.slice(labels, [0, 0], [-1, logits_size]) return tf.cond(tf.greater(pad, 0), _PadFn, _SliceFn)
Example #16
Source File: common_layers.py From fine-lm with MIT License | 6 votes |
def pool(inputs, window_size, pooling_type, padding, strides=(1, 1)): """Pooling (supports "LEFT").""" with tf.name_scope("pool", values=[inputs]): static_shape = inputs.get_shape() if not static_shape or len(static_shape) != 4: raise ValueError("Inputs to conv must have statically known rank 4.") # Add support for left padding. if padding == "LEFT": assert window_size[0] % 2 == 1 and window_size[1] % 2 == 1 if len(static_shape) == 3: width_padding = 2 * (window_size[1] // 2) padding_ = [[0, 0], [width_padding, 0], [0, 0]] else: height_padding = 2 * (window_size[0] // 2) cond_padding = tf.cond( tf.equal(shape_list(inputs)[2], 1), lambda: tf.constant(0), lambda: tf.constant(2 * (window_size[1] // 2))) width_padding = 0 if static_shape[2] == 1 else cond_padding padding_ = [[0, 0], [height_padding, 0], [width_padding, 0], [0, 0]] inputs = tf.pad(inputs, padding_) inputs.set_shape([static_shape[0], None, None, static_shape[3]]) padding = "VALID" return tf.nn.pool(inputs, window_size, pooling_type, padding, strides=strides)
Example #17
Source File: faster_rcnn_meta_arch.py From DOTA_models with Apache License 2.0 | 6 votes |
def _padded_batched_proposals_indicator(self, num_proposals, max_num_proposals): """Creates indicator matrix of non-pad elements of padded batch proposals. Args: num_proposals: Tensor of type tf.int32 with shape [batch_size]. max_num_proposals: Maximum number of proposals per image (integer). Returns: A Tensor of type tf.bool with shape [batch_size, max_num_proposals]. """ batch_size = tf.size(num_proposals) tiled_num_proposals = tf.tile( tf.expand_dims(num_proposals, 1), [1, max_num_proposals]) tiled_proposal_index = tf.tile( tf.expand_dims(tf.range(max_num_proposals), 0), [batch_size, 1]) return tf.greater(tiled_num_proposals, tiled_proposal_index)
Example #18
Source File: bytenet.py From fine-lm with MIT License | 6 votes |
def bytenet_internal(inputs, targets, hparams): """ByteNet, main step used for training.""" with tf.variable_scope("bytenet"): # Flatten inputs and extend length by 50%. inputs = tf.expand_dims(common_layers.flatten4d3d(inputs), axis=2) extend_length = tf.to_int32(0.5 * tf.to_float(tf.shape(inputs)[1])) inputs_shape = inputs.shape.as_list() inputs = tf.pad(inputs, [[0, 0], [0, extend_length], [0, 0], [0, 0]]) inputs_shape[1] = None inputs.set_shape(inputs_shape) # Don't lose the other shapes when padding. # Pad inputs and targets to be the same length, divisible by 50. inputs, targets = common_layers.pad_to_same_length( inputs, targets, final_length_divisible_by=50) final_encoder = residual_dilated_conv(inputs, hparams.num_block_repeat, "SAME", "encoder", hparams) shifted_targets = common_layers.shift_right(targets) kernel = (hparams.kernel_height, hparams.kernel_width) decoder_start = common_layers.conv_block( tf.concat([final_encoder, shifted_targets], axis=3), hparams.hidden_size, [((1, 1), kernel)], padding="LEFT") return residual_dilated_conv(decoder_start, hparams.num_block_repeat, "LEFT", "decoder", hparams)
Example #19
Source File: resnet.py From deep-models with Apache License 2.0 | 6 votes |
def basic_block(input, in_features, out_features, stride, is_training, keep_prob): if stride == 1: shortcut = input else: shortcut = tf.nn.avg_pool(input, [ 1, stride, stride, 1 ], [1, stride, stride, 1 ], 'VALID') shortcut = tf.pad(shortcut, [[0, 0], [0, 0], [0, 0], [(out_features-in_features)//2, (out_features-in_features)//2]]) current = conv2d(input, in_features, out_features, 3, stride) current = tf.nn.dropout(current, keep_prob) current = tf.contrib.layers.batch_norm(current, scale=True, is_training=is_training, updates_collections=None) current = tf.nn.relu(current) current = conv2d(current, out_features, out_features, 3, 1) current = tf.nn.dropout(current, keep_prob) current = tf.contrib.layers.batch_norm(current, scale=True, is_training=is_training, updates_collections=None) # No final relu as per http://torch.ch/blog/2016/02/04/resnets.html return current + shortcut
Example #20
Source File: common_attention.py From fine-lm with MIT License | 5 votes |
def pad_to_multiple_2d(x, block_shape): """Making sure x is a multiple of shape. x is [batch, heads, h, w, depth].""" old_shape = x.get_shape().dims last = old_shape[-1] height_padding = -common_layers.shape_list(x)[2] % block_shape[0] width_padding = -common_layers.shape_list(x)[3] % block_shape[1] paddings = [[0, 0], [0, 0], [0, height_padding], [0, width_padding], [0, 0]] padded_x = tf.pad(x, paddings) padded_shape = padded_x.get_shape().as_list() padded_shape = padded_shape[:-1] + [last] padded_x.set_shape(padded_shape) return padded_x
Example #21
Source File: common_attention.py From fine-lm with MIT License | 5 votes |
def _local_unmasked_relative_to_absolute(x): """Converts tensor from relative to aboslute indexing for local attention. Args: x: a Tensor of shape [batch (or batch*num_blocks), heads, length, 2 * length - 1] Returns: A Tensor of shape [batch (or batch*num_blocks), heads, length, length-1] """ x_shape = common_layers.shape_list(x) batch = x_shape[0] heads = x_shape[1] length = x_shape[2] # Concat columns of pad to shift from relative to absolute indexing. col_pad = tf.zeros((batch, heads, length, 1)) x = tf.concat([x, col_pad], axis=3) # Concat extra elements so to add up to shape (len+1, 2*len-2). flat_x = tf.reshape(x, [batch, heads, length * 2 * length]) flat_pad = tf.zeros((batch, heads, length-1)) flat_x_padded = tf.concat([flat_x, flat_pad], axis=2) # Reshape and slice out the padded elements. final_x = tf.reshape(flat_x_padded, [batch, heads, length+1, 2*length-1]) final_x = final_x[:, :, :, length-1:] final_x = final_x[:, :, :length, :] return final_x
Example #22
Source File: common_layers.py From fine-lm with MIT License | 5 votes |
def conv_internal(conv_fn, inputs, filters, kernel_size, **kwargs): """Conditional conv_fn making kernel 1d or 2d depending on inputs shape.""" static_shape = inputs.get_shape() if not static_shape or len(static_shape) != 4: raise ValueError("Inputs to conv must have statically known rank 4. " "Shape: " + str(static_shape)) # Add support for left padding. if kwargs.get("padding") == "LEFT": dilation_rate = (1, 1) if "dilation_rate" in kwargs: dilation_rate = kwargs["dilation_rate"] assert kernel_size[0] % 2 == 1 and kernel_size[1] % 2 == 1 height_padding = 2 * (kernel_size[0] // 2) * dilation_rate[0] cond_padding = tf.cond( tf.equal(shape_list(inputs)[2], 1), lambda: tf.constant(0), lambda: tf.constant(2 * (kernel_size[1] // 2) * dilation_rate[1])) width_padding = 0 if static_shape[2] == 1 else cond_padding padding = [[0, 0], [height_padding, 0], [width_padding, 0], [0, 0]] inputs = tf.pad(inputs, padding) # Set middle two dimensions to None to prevent convolution from complaining inputs.set_shape([static_shape[0], None, None, static_shape[3]]) kwargs["padding"] = "VALID" def conv2d_kernel(kernel_size_arg, name_suffix): """Call conv2d but add suffix to name.""" name = "{}_{}".format(kwargs.get("name", "conv"), name_suffix) original_name = kwargs.pop("name", None) original_force2d = kwargs.pop("force2d", None) result = conv_fn(inputs, filters, kernel_size_arg, name=name, **kwargs) if original_name is not None: kwargs["name"] = original_name # Restore for other calls. if original_force2d is not None: kwargs["force2d"] = original_force2d return result return conv2d_kernel(kernel_size, "single")
Example #23
Source File: common_layers.py From fine-lm with MIT License | 5 votes |
def shift_right_2d(x, pad_value=None): """Shift the second dimension of x right by one.""" if pad_value is None: shifted_targets = tf.pad(x, [[0, 0], [1, 0]])[:, :-1] else: shifted_targets = tf.concat([pad_value, x], axis=1)[:, :-1] return shifted_targets
Example #24
Source File: common_layers.py From fine-lm with MIT License | 5 votes |
def shift_right_3d(x, pad_value=None): """Shift the second dimension of x right by one.""" if pad_value is None: shifted_targets = tf.pad(x, [[0, 0], [1, 0], [0, 0]])[:, :-1, :] else: shifted_targets = tf.concat([pad_value, x], axis=1)[:, :-1, :] return shifted_targets
Example #25
Source File: common_layers.py From fine-lm with MIT License | 5 votes |
def shift_right(x, pad_value=None): """Shift the second dimension of x right by one.""" if pad_value is None: shifted_targets = tf.pad(x, [[0, 0], [1, 0], [0, 0], [0, 0]])[:, :-1, :, :] else: shifted_targets = tf.concat([pad_value, x], axis=1)[:, :-1, :, :] return shifted_targets
Example #26
Source File: probclass.py From imgcomp-cvpr with GNU General Public License v3.0 | 5 votes |
def get_np_pad_fn(): return functools.partial(np.pad, mode='constant')
Example #27
Source File: probclass.py From imgcomp-cvpr with GNU General Public License v3.0 | 5 votes |
def pc_pad_grad(x, pad, pad_var): """ Like tf.pad but gradients flow to pad_var :param x: NCHW :param pad: will pad with pads = [[0, 0], don't pad batch dimension [pad, 0], don't pad depth_future, it's not seen by any filter [pad, pad], [pad, pad]] :param pad_var: value to use for padding :return: """ with tf.name_scope('pc_pad_grad'): n, c, h, w = x.shape.as_list() with tf.name_scope('pad_var_NCHW'): pad_var = tf.expand_dims(tf.expand_dims(tf.expand_dims(tf.expand_dims(pad_var, 0), 0), 0), 0) with tf.name_scope('front'): front = tf.tile(pad_var, [n, pad, h, w]) x_front = tf.concat((front, x), 1) with tf.name_scope('left_right'): left = tf.tile(pad_var, [n, c + pad, h, pad]) right = left x_front_left_right = tf.concat((left, x_front, right), 3) with tf.name_scope('top_bottom'): top = tf.tile(pad_var, [n, c + pad, pad, w + 2 * pad]) bottom = top x_fron_left_right_top_bottom = tf.concat((top, x_front_left_right, bottom), 2) return x_fron_left_right_top_bottom
Example #28
Source File: probclass.py From imgcomp-cvpr with GNU General Public License v3.0 | 5 votes |
def undo_pad_for_probclass3d(x, context_size): """ :param x: NCHW tensorflow Tensor or numpy array """ if isinstance(x, np.ndarray) and x.ndim == 3: return remove_batch_dim(undo_pad_for_probclass3d(add_batch_dim(x), context_size)) with tf.name_scope('undo_pad_cs' + str(context_size)): pad = context_size // 2 assert pad >= 1 return x[:, pad:, pad:-pad, pad:-pad]
Example #29
Source File: resnet.py From fine-lm with MIT License | 5 votes |
def fixed_padding(inputs, kernel_size, data_format="channels_first"): """Pads the input along the spatial dimensions independently of input size. Args: inputs: `Tensor` of size `[batch, channels, height, width]` or `[batch, height, width, channels]` depending on `data_format`. kernel_size: `int` kernel size to be used for `conv2d` or max_pool2d` operations. Should be a positive integer. data_format: `str` either "channels_first" for `[batch, channels, height, width]` or "channels_last for `[batch, height, width, channels]`. Returns: A padded `Tensor` of the same `data_format` with size either intact (if `kernel_size == 1`) or padded (if `kernel_size > 1`). """ pad_total = kernel_size - 1 pad_beg = pad_total // 2 pad_end = pad_total - pad_beg if data_format == "channels_first": padded_inputs = tf.pad( inputs, [[0, 0], [0, 0], [pad_beg, pad_end], [pad_beg, pad_end]]) else: padded_inputs = tf.pad( inputs, [[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]]) return padded_inputs
Example #30
Source File: common_layers.py From fine-lm with MIT License | 5 votes |
def pad_to_same_length(x, y, final_length_divisible_by=1, axis=1): """Pad tensors x and y on axis 1 so that they have the same length.""" if axis not in [1, 2]: raise ValueError("Only axis=1 and axis=2 supported for now.") with tf.name_scope("pad_to_same_length", values=[x, y]): x_length = shape_list(x)[axis] y_length = shape_list(y)[axis] if (isinstance(x_length, int) and isinstance(y_length, int) and x_length == y_length and final_length_divisible_by == 1): return x, y max_length = tf.maximum(x_length, y_length) if final_length_divisible_by > 1: # Find the nearest larger-or-equal integer divisible by given number. max_length += final_length_divisible_by - 1 max_length //= final_length_divisible_by max_length *= final_length_divisible_by length_diff1 = max_length - x_length length_diff2 = max_length - y_length def padding_list(length_diff, arg): if axis == 1: return [[[0, 0], [0, length_diff]], tf.zeros([tf.rank(arg) - 2, 2], dtype=tf.int32)] return [[[0, 0], [0, 0], [0, length_diff]], tf.zeros([tf.rank(arg) - 3, 2], dtype=tf.int32)] paddings1 = tf.concat(padding_list(length_diff1, x), axis=0) paddings2 = tf.concat(padding_list(length_diff2, y), axis=0) res_x = tf.pad(x, paddings1) res_y = tf.pad(y, paddings2) # Static shapes are the same except for axis=1. x_shape = x.shape.as_list() x_shape[axis] = None res_x.set_shape(x_shape) y_shape = y.shape.as_list() y_shape[axis] = None res_y.set_shape(y_shape) return res_x, res_y