def create_model(self, model_input, vocab_size, l2_penalty=1e-8, **unused_params):
"""Creates a logistic model.
Args:
model_input: 'batch' x 'num_features' matrix of input features.
vocab_size: The number of classes in the dataset.
Returns:
A dictionary with a tensor containing the probability predictions of the
model in the 'predictions' key. The dimensions of the tensor are
batch_size x num_classes."""
model_input = tf.cast(model_input,dtype=tf.float32)
hidden_size = FLAGS.hidden_size
model_mask, indices_input = tf.nn.top_k(model_input, k=FLAGS.top_k)
indices_input = tf.reshape(indices_input, [-1])
models_mask = tf.reshape(model_mask, [-1,FLAGS.top_k,1])
with tf.name_scope("embedding"):
embeddings = tf.Variable(
tf.random_uniform([vocab_size, hidden_size], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, indices_input)
output = slim.fully_connected(
embed,
vocab_size,
activation_fn=tf.nn.sigmoid,
weights_regularizer=slim.l2_regularizer(l2_penalty),
scope="output")
indices_one_hot = tf.one_hot(indices_input, vocab_size)
output = output * (1 - indices_one_hot) + indices_one_hot
output_val = tf.reshape(output,[-1,FLAGS.top_k,vocab_size])
predictions_val = tf.reduce_sum(output_val*models_mask, axis=1)/tf.reduce_sum(models_mask, axis=1)
return {"predictions": output, "predictions_val": predictions_val}
评论列表
文章目录