def composite_layer(inputs, mask, hparams, for_output=False): """Composite layer.""" x = inputs # Applies ravanbakhsh on top of each other. if hparams.composite_layer_type == "ravanbakhsh": for layer in xrange(hparams.layers_per_layer): with tf.variable_scope(".%d" % layer): x = common_layers.ravanbakhsh_set_layer( hparams.hidden_size, x, mask=mask, sequential=for_output, dropout=hparams.relu_dropout) # Transforms elements to get a context, and then uses this in a final layer. elif hparams.composite_layer_type == "reembedding": # Transform elements n times and then pool. for layer in xrange(hparams.layers_per_layer): with tf.variable_scope("sub_layer_%d" % layer): x = common_layers.linear_set_layer( hparams.hidden_size, x, dropout=hparams.relu_dropout) if for_output: context = common_layers.running_global_pool_1d(x) else: context = common_layers.global_pool_1d(x, mask=mask) # Final layer. x = common_layers.linear_set_layer(hparams.hidden_size, x, context=context, dropout=hparams.relu_dropout) return x
def testRavanbakhshSetLayer(self): x1 = np.random.rand(5, 4, 11) x1_ = tf.Variable(x1, dtype=tf.float32) layer = common_layers.ravanbakhsh_set_layer(32, x1_) self.evaluate(tf.global_variables_initializer()) actual = self.evaluate(layer) self.assertEqual(actual.shape, (5, 4, 32))