siamese.py 文件源码

python
阅读 21 收藏 0 点赞 0 评论 0

项目:jon-siamese 作者: maigimenez 项目源码 文件源码
def __init__(self, sequence_length, vocab_size, embedding_size,
                 filter_sizes, num_filters, margin):
        with tf.name_scope("embeddings") as embeddings_scope:
            self.filter_sizes = filter_sizes
            self.embedding_size = embedding_size
            self.num_filters = num_filters
            self.W_embedding = tf.Variable(tf.random_uniform([vocab_size, self.embedding_size], -1.0, 1.0),
                                           trainable=True, name="W_embedding")
            self.is_training = tf.placeholder(tf.bool, [], name='is_training')

        with tf.variable_scope("siamese") as siam_scope:
            # 1ST LAYER: Embedding layer
            with tf.variable_scope("embeddings-siamese") as input_scope:
                self.left_input = tf.placeholder(tf.int32, [None, sequence_length], name='left')
                left_embedded_words = tf.nn.embedding_lookup(self.W_embedding, self.left_input)
                self.left_embedded = tf.expand_dims(left_embedded_words, -1, name='left_embeddings')
                print('  ---> EMBEDDING LEFT: ', self.left_embedded)

                self.right_input = tf.placeholder(tf.int32, [None, sequence_length], name='right')
                right_embedded_words = tf.nn.embedding_lookup(self.W_embedding, self.right_input)
                self.right_embedded = tf.expand_dims(right_embedded_words, -1, name='right_embeddings')
                print('  ---> EMBEDDING RIGHT: ', self.right_embedded)

            self.left_siamese = self.subnet(self.left_embedded, 'left', False)
            print("---> SIAMESE TENSOR: ", self.left_siamese)
            siam_scope.reuse_variables()
            self.right_siamese = self.subnet(self.right_embedded, 'right', True)
            print("---> SIAMESE TENSOR: ", self.right_siamese)

        with tf.name_scope("similarity"):
            print('\n ----------------------- JOIN SIAMESE ----------------------------')
            self.labels = tf.placeholder(tf.int32, [None, 1], name='labels')
            self.labels = tf.to_float(self.labels)
            print('---> LABELS: ', self.labels)

            with tf.variable_scope("loss"):
                self.margin = tf.get_variable('margin', dtype=tf.float32,
                                              initializer=tf.constant(margin, shape=[1]),
                                              trainable=False)
                self.loss, self.attr, \
                self.rep, self.distance, self.maxpart = contrastive_loss(self.labels,
                                                           self.left_siamese,
                                                           self.right_siamese,
                                                           self.margin)

        with tf.name_scope("prediction"):
            # TODO Este es un parámetro de configuración
            self.threshold = tf.get_variable('threshold', dtype=tf.float32,
                                             initializer=tf.constant(1.0, shape=[1]))
            self.predictions = tf.less_equal(self.distance, self.threshold)
            self.predictions = tf.cast(self.predictions, 'float32')
            self.correct_predictions = tf.equal(self.predictions, self.labels)
            self.accuracy = tf.reduce_mean(tf.cast(self.correct_predictions, tf.float32))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号