Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
JianGuanTHU
GitHub Repository: JianGuanTHU/StoryEndGen
Path: blob/master/output_projection.py
487 views
1
import tensorflow as tf
2
from tensorflow.contrib.layers.python.layers import layers
3
from tensorflow.python.ops import variable_scope
4
5
def output_projection_layer(num_units, num_symbols, num_samples=None, name="output_projection"):
6
def output_fn(outputs):
7
return layers.linear(outputs, num_symbols, scope=name)
8
9
def sampled_sequence_loss(outputs, targets, masks):
10
with variable_scope.variable_scope('decoder/%s' % name):
11
weights = tf.transpose(tf.get_variable("weights", [num_units, num_symbols]))
12
bias = tf.get_variable("biases", [num_symbols])
13
14
local_labels = tf.reshape(targets, [-1, 1])
15
local_outputs = tf.reshape(outputs, [-1, num_units])
16
local_masks = tf.reshape(masks, [-1])
17
18
local_loss = tf.nn.sampled_softmax_loss(weights, bias, local_labels,
19
local_outputs, num_samples, num_symbols)
20
local_loss = local_loss * local_masks
21
22
loss = tf.reduce_sum(local_loss)
23
total_size = tf.reduce_sum(local_masks)
24
total_size += 1e-12 # to avoid division by 0 for all-0 weights
25
26
return loss / total_size
27
28
return output_fn, sampled_sequence_loss
29
30
31