|
@@ -108,24 +108,29 @@ class Seq2SeqModel(object):
|
|
|
local_b = tf.cast(b, tf.float32)
|
|
local_b = tf.cast(b, tf.float32)
|
|
|
local_inputs = tf.cast(inputs, tf.float32)
|
|
local_inputs = tf.cast(inputs, tf.float32)
|
|
|
return tf.cast(
|
|
return tf.cast(
|
|
|
- tf.nn.sampled_softmax_loss(local_w_t, local_b, local_inputs, labels,
|
|
|
|
|
- num_samples, self.target_vocab_size),
|
|
|
|
|
|
|
+ tf.nn.sampled_softmax_loss(
|
|
|
|
|
+ weights=local_w_t,
|
|
|
|
|
+ biases=local_b,
|
|
|
|
|
+ labels=labels,
|
|
|
|
|
+ inputs=local_inputs,
|
|
|
|
|
+ num_sampled=num_samples,
|
|
|
|
|
+ num_classes=self.target_vocab_size),
|
|
|
dtype)
|
|
dtype)
|
|
|
softmax_loss_function = sampled_loss
|
|
softmax_loss_function = sampled_loss
|
|
|
|
|
|
|
|
# Create the internal multi-layer cell for our RNN.
|
|
# Create the internal multi-layer cell for our RNN.
|
|
|
def single_cell():
|
|
def single_cell():
|
|
|
- return tf.nn.rnn_cell.GRUCell(size)
|
|
|
|
|
|
|
+ return tf.contrib.rnn.GRUCell(size)
|
|
|
if use_lstm:
|
|
if use_lstm:
|
|
|
def single_cell():
|
|
def single_cell():
|
|
|
- return tf.nn.rnn_cell.BasicLSTMCell(size)
|
|
|
|
|
|
|
+ return tf.contrib.rnn.BasicLSTMCell(size)
|
|
|
cell = single_cell()
|
|
cell = single_cell()
|
|
|
if num_layers > 1:
|
|
if num_layers > 1:
|
|
|
- cell = tf.nn.rnn_cell.MultiRNNCell([single_cell() for _ in range(num_layers)])
|
|
|
|
|
|
|
+ cell = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])
|
|
|
|
|
|
|
|
# The seq2seq function: we use embedding for the input and attention.
|
|
# The seq2seq function: we use embedding for the input and attention.
|
|
|
def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):
|
|
def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):
|
|
|
- return tf.nn.seq2seq.embedding_attention_seq2seq(
|
|
|
|
|
|
|
+ return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
|
|
|
encoder_inputs,
|
|
encoder_inputs,
|
|
|
decoder_inputs,
|
|
decoder_inputs,
|
|
|
cell,
|
|
cell,
|
|
@@ -155,7 +160,7 @@ class Seq2SeqModel(object):
|
|
|
|
|
|
|
|
# Training outputs and losses.
|
|
# Training outputs and losses.
|
|
|
if forward_only:
|
|
if forward_only:
|
|
|
- self.outputs, self.losses = tf.nn.seq2seq.model_with_buckets(
|
|
|
|
|
|
|
+ self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
|
|
|
self.encoder_inputs, self.decoder_inputs, targets,
|
|
self.encoder_inputs, self.decoder_inputs, targets,
|
|
|
self.target_weights, buckets, lambda x, y: seq2seq_f(x, y, True),
|
|
self.target_weights, buckets, lambda x, y: seq2seq_f(x, y, True),
|
|
|
softmax_loss_function=softmax_loss_function)
|
|
softmax_loss_function=softmax_loss_function)
|
|
@@ -167,7 +172,7 @@ class Seq2SeqModel(object):
|
|
|
for output in self.outputs[b]
|
|
for output in self.outputs[b]
|
|
|
]
|
|
]
|
|
|
else:
|
|
else:
|
|
|
- self.outputs, self.losses = tf.nn.seq2seq.model_with_buckets(
|
|
|
|
|
|
|
+ self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
|
|
|
self.encoder_inputs, self.decoder_inputs, targets,
|
|
self.encoder_inputs, self.decoder_inputs, targets,
|
|
|
self.target_weights, buckets,
|
|
self.target_weights, buckets,
|
|
|
lambda x, y: seq2seq_f(x, y, False),
|
|
lambda x, y: seq2seq_f(x, y, False),
|