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 testLinearSetLayer(self): x1 = np.random.rand(5, 4, 11) cont = np.random.rand(5, 13) x1_ = tf.Variable(x1, dtype=tf.float32) cont_ = tf.Variable(cont, dtype=tf.float32) simple_ff = common_layers.linear_set_layer(32, x1_) cont_ff = common_layers.linear_set_layer(32, x1_, context=cont_) self.evaluate(tf.global_variables_initializer()) actual = self.evaluate([simple_ff, cont_ff]) self.assertEqual(actual[0].shape, (5, 4, 32)) self.assertEqual(actual[1].shape, (5, 4, 32))