import tensorflow as tf

                                # initializer=tf.keras.initializers.lecun_normal(),
                                dtype=tf.float32)
            V = tf.get_variable(name="attn_V", shape=[2 * self.config.hidden_size, 1],
                                initializer=tf.contrib.layers.xavier_initializer(),
                                # initializer=tf.truncated_normal_initializer(),
                                # initializer=tf.keras.initializers.lecun_normal(),
                                dtype=tf.float32)
            U = tf.get_variable(name="attn_U",
                                shape=[2 * self.config.hidden_size, 2 * self.config.hidden_size],
                                initializer=tf.contrib.layers.xavier_initializer(),
                                # initializer=tf.truncated_normal_initializer(),
                                # initializer=tf.keras.initializers.lecun_normal(),
                                dtype=tf.float32)

            self.position_emb = tf.reshape(self.position_emb, [-1, 2 * self.config.hidden_size])
            shape = tf.shape(output)
            output = tf.reshape(output, [-1, 2 * self.config.hidden_size])

            atten_hidden = tf.tanh(
                tf.add(
                    tf.matmul(self.position_emb, W),
                    tf.matmul(output, U)))
            alpha = tf.nn.softmax(
                tf.reshape(tf.matmul(atten_hidden, V), [-1, shape[1], 1]), axis=1)
            output = tf.reshape(output, [-1, shape[1], 2 * self.config.hidden_size])
            C = tf.multiply(alpha, output)
            return tf.concat([output, C], axis=-1)

