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))
评论列表
文章目录