Python keras.backend.repeat_elements() Examples
The following are 30
code examples of keras.backend.repeat_elements().
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
keras.backend
, or try the search function
.
Example #1
Source File: my_layers.py From Attention-Based-Aspect-Extraction with Apache License 2.0 | 7 votes |
def call(self, input_tensor, mask=None): z_s = input_tensor[0] z_n = input_tensor[1] r_s = input_tensor[2] z_s = K.l2_normalize(z_s, axis=-1) z_n = K.l2_normalize(z_n, axis=-1) r_s = K.l2_normalize(r_s, axis=-1) steps = z_n.shape[1] pos = K.sum(z_s * r_s, axis=-1, keepdims=True) pos = K.repeat_elements(pos, steps, axis=1) r_s = K.expand_dims(r_s, axis=-2) r_s = K.repeat_elements(r_s, steps, axis=1) neg = K.sum(z_n * r_s, axis=-1) loss = K.cast(K.sum(K.maximum(0., (1. - pos + neg)), axis=-1, keepdims=True), K.floatx()) return loss
Example #2
Source File: bigru_index_selector.py From deep_qa with Apache License 2.0 | 6 votes |
def call(self, inputs, mask=None): """ Extract the GRU output for the target document index for the forward and backwards GRU outputs, and then concatenate them. If the target word index is at index l, and there are T total document words, the desired output in the forward pass is at GRU_f[l] (ignoring the batched case) and the desired output of the backwards pass is at GRU_b[T-l]. We need to get these two vectors and concatenate them. To do so, we'll reverse the backwards GRU, which allows us to use the same index/mask for both. """ # TODO(nelson): deal with case where cloze token appears multiple times # in a question. word_indices, gru_f, gru_b = inputs index_mask = K.cast(K.equal((K.ones_like(word_indices) * self.target_index), word_indices), "float32") gru_mask = K.repeat_elements(K.expand_dims(index_mask, -1), K.int_shape(gru_f)[-1], K.ndim(gru_f) - 1) masked_gru_f = switch(gru_mask, gru_f, K.zeros_like(gru_f)) selected_gru_f = K.sum(masked_gru_f, axis=1) masked_gru_b = switch(gru_mask, gru_b, K.zeros_like(gru_b)) selected_gru_b = K.sum(masked_gru_b, axis=1) selected_bigru = K.concatenate([selected_gru_f, selected_gru_b], axis=-1) return selected_bigru
Example #3
Source File: capsulelayers.py From textcaps with MIT License | 6 votes |
def call(self, inputs, training=None): inputs_expand = K.expand_dims(inputs, 1) inputs_tiled = K.tile(inputs_expand, [1, self.num_capsule, 1, 1]) if(self.channels!=0): W2 = K.repeat_elements(self.W,int(self.input_num_capsule/self.channels),1) else: W2 = self.W inputs_hat = K.map_fn(lambda x: K.batch_dot(x, W2, [2, 3]) , elems=inputs_tiled) b = tf.zeros(shape=[K.shape(inputs_hat)[0], self.num_capsule, self.input_num_capsule]) assert self.routings > 0, 'The routings should be > 0.' for i in range(self.routings): c = tf.nn.softmax(b, dim=1) outputs = squash(K.batch_dot(c, inputs_hat, [2, 2])+ self.B) if i < self.routings - 1: b += K.batch_dot(outputs, inputs_hat, [2, 3]) return outputs
Example #4
Source File: networks.py From posewarp-cvpr2018 with MIT License | 6 votes |
def make_warped_stack(args): mask = args[0] src_in = args[1] trans_in = args[2] for i in range(11): mask_i = K.repeat_elements(tf.expand_dims(mask[:, :, :, i], 3), 3, 3) src_masked = tf.multiply(mask_i, src_in) if i == 0: warps = src_masked else: warp_i = affine_warp(src_masked, trans_in[:, :, :, i]) warps = tf.concat([warps, warp_i], 3) return warps
Example #5
Source File: custom.py From WannaPark with GNU General Public License v3.0 | 6 votes |
def call(self, x, mask=None): if K.image_dim_ordering == "th": _, f, r, c = self.shape else: _, r, c, f = self.shape squared = K.square(x) pooled = K.pool2d(squared, (self.n, self.n), strides=(1, 1), padding="same", pool_mode="avg") if K.image_dim_ordering == "th": summed = K.sum(pooled, axis=1, keepdims=True) averaged = self.alpha * K.repeat_elements(summed, f, axis=1) else: summed = K.sum(pooled, axis=3, keepdims=True) averaged = self.alpha * K.repeat_elements(summed, f, axis=3) denom = K.pow(self.k + averaged, self.beta) return x / denom
Example #6
Source File: my_layers.py From Unsupervised-Aspect-Extraction with Apache License 2.0 | 6 votes |
def call(self, input_tensor, mask=None): x = input_tensor[0] y = input_tensor[1] mask = mask[0] y = K.transpose(K.dot(self.W, K.transpose(y))) y = K.expand_dims(y, dim=-2) y = K.repeat_elements(y, self.steps, axis=1) eij = K.sum(x*y, axis=-1) if self.bias: b = K.repeat_elements(self.b, self.steps, axis=0) eij += b eij = K.tanh(eij) a = K.exp(eij) if mask is not None: a *= K.cast(mask, K.floatx()) a /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx()) return a
Example #7
Source File: DenseMoE.py From mixture-of-experts with GNU General Public License v3.0 | 6 votes |
def call(self, inputs): expert_outputs = tf.tensordot(inputs, self.expert_kernel, axes=1) if self.use_expert_bias: expert_outputs = K.bias_add(expert_outputs, self.expert_bias) if self.expert_activation is not None: expert_outputs = self.expert_activation(expert_outputs) gating_outputs = K.dot(inputs, self.gating_kernel) if self.use_gating_bias: gating_outputs = K.bias_add(gating_outputs, self.gating_bias) if self.gating_activation is not None: gating_outputs = self.gating_activation(gating_outputs) output = K.sum(expert_outputs * K.repeat_elements(K.expand_dims(gating_outputs, axis=1), self.units, axis=1), axis=2) return output
Example #8
Source File: my_layers.py From Attention-Based-Aspect-Extraction with Apache License 2.0 | 6 votes |
def call(self, input_tensor, mask=None): x = input_tensor[0] y = input_tensor[1] mask = mask[0] y = K.transpose(K.dot(self.W, K.transpose(y))) y = K.expand_dims(y, axis=-2) y = K.repeat_elements(y, self.steps, axis=1) eij = K.sum(x * y, axis=-1) if self.bias: b = K.repeat_elements(self.b, self.steps, axis=0) eij += b eij = K.tanh(eij) a = K.exp(eij) if mask is not None: a *= K.cast(mask, K.floatx()) a /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx()) return a
Example #9
Source File: query_reduction_network.py From recurrentshop with MIT License | 6 votes |
def QRNcell(): xq = Input(batch_shape=(batch_size, embedding_dim * 2)) # Split into context and query xt = Lambda(lambda x, dim: x[:, :dim], arguments={'dim': embedding_dim}, output_shape=lambda s: (s[0], s[1] / 2))(xq) qt = Lambda(lambda x, dim: x[:, dim:], arguments={'dim': embedding_dim}, output_shape=lambda s: (s[0], s[1] / 2))(xq) h_tm1 = Input(batch_shape=(batch_size, embedding_dim)) zt = Dense(1, activation='sigmoid', bias_initializer=Constant(2.5))(multiply([xt, qt])) zt = Lambda(lambda x, dim: K.repeat_elements(x, dim, axis=1), arguments={'dim': embedding_dim})(zt) ch = Dense(embedding_dim, activation='tanh')(concatenate([xt, qt], axis=-1)) rt = Dense(1, activation='sigmoid')(multiply([xt, qt])) rt = Lambda(lambda x, dim: K.repeat_elements(x, dim, axis=1), arguments={'dim': embedding_dim})(rt) ht = add([multiply([zt, ch, rt]), multiply([Lambda(lambda x: 1 - x, output_shape=lambda s: s)(zt), h_tm1])]) return RecurrentModel(input=xq, output=ht, initial_states=[h_tm1], final_states=[ht], return_sequences=True) # # Load data #
Example #10
Source File: my_layers.py From Unsupervised-Aspect-Extraction with Apache License 2.0 | 6 votes |
def call(self, input_tensor, mask=None): z_s = input_tensor[0] z_n = input_tensor[1] r_s = input_tensor[2] z_s = z_s / K.cast(K.epsilon() + K.sqrt(K.sum(K.square(z_s), axis=-1, keepdims=True)), K.floatx()) z_n = z_n / K.cast(K.epsilon() + K.sqrt(K.sum(K.square(z_n), axis=-1, keepdims=True)), K.floatx()) r_s = r_s / K.cast(K.epsilon() + K.sqrt(K.sum(K.square(r_s), axis=-1, keepdims=True)), K.floatx()) steps = z_n.shape[1] pos = K.sum(z_s*r_s, axis=-1, keepdims=True) pos = K.repeat_elements(pos, steps, axis=-1) r_s = K.expand_dims(r_s, dim=-2) r_s = K.repeat_elements(r_s, steps, axis=1) neg = K.sum(z_n*r_s, axis=-1) loss = K.cast(K.sum(T.maximum(0., (1. - pos + neg)), axis=-1, keepdims=True), K.floatx()) return loss
Example #11
Source File: densities.py From DeepIV with MIT License | 6 votes |
def mix_gaussian_loss(x, mu, log_sig, w): ''' Combine the mixture of gaussian distribution and the loss into a single function so that we can do the log sum exp trick for numerical stability... ''' if K.backend() == "tensorflow": x.set_shape([None, 1]) gauss = log_norm_pdf(K.repeat_elements(x=x, rep=mu.shape[1], axis=1), mu, log_sig) # TODO: get rid of clipping. gauss = K.clip(gauss, -40, 40) max_gauss = K.maximum((0.), K.max(gauss)) # log sum exp trick... gauss = gauss - max_gauss out = K.sum(w * K.exp(gauss), axis=1) loss = K.mean(-K.log(out) + max_gauss) return loss
Example #12
Source File: models.py From sam with MIT License | 6 votes |
def kl_divergence(y_true, y_pred): max_y_pred = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.max(K.max(y_pred, axis=2), axis=2)), shape_r_out, axis=-1)), shape_c_out, axis=-1) y_pred /= max_y_pred sum_y_true = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.sum(K.sum(y_true, axis=2), axis=2)), shape_r_out, axis=-1)), shape_c_out, axis=-1) sum_y_pred = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.sum(K.sum(y_pred, axis=2), axis=2)), shape_r_out, axis=-1)), shape_c_out, axis=-1) y_true /= (sum_y_true + K.epsilon()) y_pred /= (sum_y_pred + K.epsilon()) return 10 * K.sum(K.sum(y_true * K.log((y_true / (y_pred + K.epsilon())) + K.epsilon()), axis=-1), axis=-1) # Correlation Coefficient Loss
Example #13
Source File: attentive_convlstm.py From sam with MIT License | 6 votes |
def step(self, x, states): x_shape = K.shape(x) h_tm1 = states[0] c_tm1 = states[1] e = self.V_a(K.tanh(self.W_a(h_tm1) + self.U_a(x))) a = K.reshape(K.softmax(K.batch_flatten(e)), (x_shape[0], 1, x_shape[2], x_shape[3])) x_tilde = x * K.repeat_elements(a, x_shape[1], 1) x_i = self.W_i(x_tilde) x_f = self.W_f(x_tilde) x_c = self.W_c(x_tilde) x_o = self.W_o(x_tilde) i = self.inner_activation(x_i + self.U_i(h_tm1)) f = self.inner_activation(x_f + self.U_f(h_tm1)) c = f * c_tm1 + i * self.activation(x_c + self.U_c(h_tm1)) o = self.inner_activation(x_o + self.U_o(h_tm1)) h = o * self.activation(c) return h, [h, c]
Example #14
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #15
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #16
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #17
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #18
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #19
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #20
Source File: backend_test.py From DeepLearning_Wavelet-LSTM with MIT License | 6 votes |
def test_repeat_elements(self): reps = 3 for ndims in [1, 2, 3]: shape = np.arange(2, 2 + ndims) arr = np.arange(np.prod(shape)).reshape(shape) for rep_axis in range(ndims): np_rep = np.repeat(arr, reps, axis=rep_axis) check_single_tensor_operation('repeat_elements', arr, BACKENDS, rep=reps, axis=rep_axis, assert_value_with_ref=np_rep) if K.backend() != 'cntk': shape = list(shape) shape[rep_axis] = None x = K.placeholder(shape=shape) y = K.repeat_elements(x, reps, axis=rep_axis) assert y._keras_shape == tuple(shape) assert y._keras_shape == K.int_shape(y)
Example #21
Source File: my_layers.py From DAS with Apache License 2.0 | 6 votes |
def call(self, x, mask=None): a = x[0] b = x[1] a = K.mean(a, axis=0, keepdims=True) b = K.mean(b, axis=0, keepdims=True) a /= K.sum(a, keepdims=True) b /= K.sum(b, keepdims=True) a = K.clip(a, K.epsilon(), 1) b = K.clip(b, K.epsilon(), 1) loss = K.sum(a*K.log(a/b), axis=-1, keepdims=True) \ + K.sum(b*K.log(b/a), axis=-1, keepdims=True) loss = K.repeat_elements(loss, self.batch_size, axis=0) return loss
Example #22
Source File: my_layers.py From Aspect-level-sentiment with Apache License 2.0 | 6 votes |
def call(self, input_tensor, mask=None): x = input_tensor[0] aspect = input_tensor[1] mask = mask[0] aspect = K.transpose(K.dot(self.W, K.transpose(aspect))) aspect = K.expand_dims(aspect, axis=-2) aspect = K.repeat_elements(aspect, self.steps, axis=1) eij = K.sum(x*aspect, axis=-1) if self.bias: b = K.repeat_elements(self.b, self.steps, axis=0) eij += b eij = K.tanh(eij) a = K.exp(eij) if mask is not None: a *= K.cast(mask, K.floatx()) a /= K.cast(K.sum(a, axis=1, keepdims=True) + K.epsilon(), K.floatx()) return a
Example #23
Source File: rnnlayer.py From recurrent-attention-for-QA-SQUAD-based-on-keras with MIT License | 6 votes |
def step(self, inputs, states): h_tm1 = states[0] # previous memory #B_U = states[1] # dropout matrices for recurrent units #B_W = states[2] h_tm1a = K.dot(h_tm1, self.Wa) eij = K.dot(K.tanh(h_tm1a + K.dot(inputs[:, :self.h_dim], self.Ua)), self.Va) eijs = K.repeat_elements(eij, self.h_dim, axis=1) #alphaij = K.softmax(eijs) # batchsize * lenh h batchsize * lenh * ndim #ci = K.permute_dimensions(K.permute_dimensions(self.h, [2,0,1]) * alphaij, [1,2,0]) #cisum = K.sum(ci, axis=1) cisum = eijs*inputs[:, :self.h_dim] #print(K.shape(cisum), cisum.shape, ci.shape, self.h.shape, alphaij.shape, x.shape) zr = K.sigmoid(K.dot(inputs[:, self.h_dim:], self.Wzr) + K.dot(h_tm1, self.Uzr) + K.dot(cisum, self.Czr)) zi = zr[:, :self.units] ri = zr[:, self.units: 2 * self.units] si_ = K.tanh(K.dot(inputs[:, self.h_dim:], self.W) + K.dot(ri*h_tm1, self.U) + K.dot(cisum, self.C)) si = (1-zi) * h_tm1 + zi * si_ return si, [si] #h_tm1, [h_tm1]
Example #24
Source File: layers.py From Hands-On-Generative-Adversarial-Networks-with-Keras with MIT License | 6 votes |
def call(self, v, **kwargs): assert (len(self.input_dims) == len(self.output_dims) and self.input_dims[0] == self.output_dims[0]) # possibly shrink spatial axis by pooling elements if len(self.input_dims) == 4 and (self.input_dims[1] > self.output_dims[1] or self.input_dims[2] > self.output_dims[2]): assert (self.input_dims[1] % self.output_dims[1] == 0 and self.input_dims[2] % self.output_dims[2] == 0) pool_sizes = (self.input_dims[1] / self.output_dims[1], self.input_dims[2] / self.output_dims[2]) strides = pool_sizes v = K.pool2d( v, pool_size=pool_sizes, strides=strides, padding='same', data_format='channels_last', pool_mode='avg') # possibly extend spatial axis by repeating elements for i in range(1, len(self.input_dims) - 1): if self.input_dims[i] < self.output_dims[i]: assert self.output_dims[i] % self.input_dims[i] == 0 v = K.repeat_elements( v, rep=int(self.output_dims[i] / self.input_dims[i]), axis=i) return v
Example #25
Source File: layer_normalization.py From keras-utility-layer-collection with MIT License | 6 votes |
def call(self, x): mean = K.mean(x, axis=-1) std = K.std(x, axis=-1) if len(x.shape) == 3: mean = K.permute_dimensions( K.repeat(mean, x.shape.as_list()[-1]), [0,2,1] ) std = K.permute_dimensions( K.repeat(std, x.shape.as_list()[-1]), [0,2,1] ) elif len(x.shape) == 2: mean = K.reshape( K.repeat_elements(mean, x.shape.as_list()[-1], 0), (-1, x.shape.as_list()[-1]) ) std = K.reshape( K.repeat_elements(mean, x.shape.as_list()[-1], 0), (-1, x.shape.as_list()[-1]) ) return self._g * (x - mean) / (std + self._epsilon) + self._b
Example #26
Source File: models.py From sam with MIT License | 6 votes |
def nss(y_true, y_pred): max_y_pred = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.max(K.max(y_pred, axis=2), axis=2)), shape_r_out, axis=-1)), shape_c_out, axis=-1) y_pred /= max_y_pred y_pred_flatten = K.batch_flatten(y_pred) y_mean = K.mean(y_pred_flatten, axis=-1) y_mean = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.expand_dims(y_mean)), shape_r_out, axis=-1)), shape_c_out, axis=-1) y_std = K.std(y_pred_flatten, axis=-1) y_std = K.repeat_elements(K.expand_dims(K.repeat_elements(K.expand_dims(K.expand_dims(y_std)), shape_r_out, axis=-1)), shape_c_out, axis=-1) y_pred = (y_pred - y_mean) / (y_std + K.epsilon()) return -(K.sum(K.sum(y_true * y_pred, axis=2), axis=2) / K.sum(K.sum(y_true, axis=2), axis=2)) # Gaussian priors initialization
Example #27
Source File: layers.py From recurrent-attention-for-QA-SQUAD-based-on-keras with MIT License | 5 votes |
def step(self, x, states): h, [h, c] = self.layer.step(x, states) attention = states[4] m = self.attn_activation(K.dot(h, self.U_a) * attention + self.b_a) s = K.sigmoid(K.dot(m, self.U_s) + self.b_s) if self.single_attention_param: h = h * K.repeat_elements(s, self.layer.output_dim, axis=1) else: h = h * s return h, [h, c]
Example #28
Source File: attention.py From ikelos with MIT License | 5 votes |
def call(self, target_tensor, mask=None): last_dim = K.ndim(self.p_tensor) expanded_p = K.repeat_elements(K.expand_dims(self.p_tensor, last_dim), K.shape(target_tensor)[last_dim], axis=last_dim) return K.sum(expanded_p * target_tensor, axis=last_dim-1)
Example #29
Source File: backend.py From deep_qa with Apache License 2.0 | 5 votes |
def tile_scalar(scalar, vector): """ NOTE: If your vector has known shape (i.e., the relevant dimension from `K.int_shape(vector) is not None`), you should just use `K.repeat_elements(scalar)` instead of this. This method works, however, when the number of entries in your vector is unknown at graph compilation time. This method takes a (collection of) scalar(s) (shape: (batch_size, 1)), and tiles that scala a number of times, giving a vector of shape (batch_size, tile_length). (I say "scalar" and "vector" here because I'm ignoring the batch_size). We need the vector as input so we know what the tile_length is - the vector is otherwise ignored. This is not done as a Keras Layer, however; if you want to use this function, you'll need to do it _inside_ of a Layer somehow, either in a Lambda or in the call() method of a Layer you're writing. TODO(matt): we could probably make a more general `tile_tensor` method, which can do this for any dimenionsality. There is another place in the code where we do this with a matrix and a tensor; all three of these can probably be one function. """ # Tensorflow can't use unknown sizes at runtime, so we have to make use of the broadcasting # ability of TF and Theano instead to create the tiled sentence encoding. # Shape: (tile_length, batch_size) k_ones = K.permute_dimensions(K.ones_like(vector), [1, 0]) # Now we have a (tile_length, batch_size) * (batch_size, 1) elementwise multiplication which is # broadcast. We then reshape back. tiled_scalar = K.permute_dimensions(k_ones * K.squeeze(scalar, axis=1), [1, 0]) return tiled_scalar
Example #30
Source File: layers.py From Keras-progressive_growing_of_gans with MIT License | 5 votes |
def call(self, input, **kwargs): s = list(K.int_shape(input)) s[0] = tf.shape(input)[0] vals = self.adjusted_std(input,axis=0,keepdims=True) # per activation, over minibatch dim if self.averaging == 'all': # average everything --> 1 value per minibatch vals = K.mean(vals,keepdims=True) reps = s; reps[-1]=1;reps[0] = tf.shape(input)[0] vals = K.tile(vals,reps) elif self.averaging == 'spatial': # average spatial locations if len(s) == 4: vals = K.mean(vals,axis=(1,2),keepdims=True) reps = s; reps[-1]=1 vals = K.tile(vals,reps) elif self.averaging == 'none': # no averaging, pass on all information vals = K.repeat_elements(vals,rep=s[0],axis=0) elif self.averaging == 'gpool': # EXPERIMENTAL: compute variance (func) over minibatch AND spatial locations. if len(s) == 4: vals = self.adjusted_std(input,axis=(0,1,2),keepdims=True) reps = s; reps[-1]=1 vals = K.tile(vals,reps) elif self.averaging == 'flat': vals = self.adjusted_std(input,keepdims=True) # variance of ALL activations --> 1 value per minibatch reps = s; reps[-1]=1 vals = K.tile(vals,reps) elif self.averaging.startswith('group'): # average everything over n groups of feature maps --> n values per minibatch n = int(self.averaging[len('group'):]) vals = vals.reshape((1, s[1], s[2], n,s[3]/n)) vals = K.mean(vals, axis=(1,2,4), keepdims=True) vals = vals.reshape((1, 1, 1,n)) reps = s; reps[-1] = 1 vals = K.tile(vals, reps) else: raise ValueError('Invalid averaging mode', self.averaging) return K.concatenate([input, vals], axis=-1)