本文整理匯總了Python中tensorflow.models.rnn.rnn.bidirectional_rnn方法的典型用法代碼示例。如果您正苦於以下問題:Python rnn.bidirectional_rnn方法的具體用法?Python rnn.bidirectional_rnn怎麽用?Python rnn.bidirectional_rnn使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類tensorflow.models.rnn.rnn
的用法示例。
在下文中一共展示了rnn.bidirectional_rnn方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: __init__
# 需要導入模塊: from tensorflow.models.rnn import rnn [as 別名]
# 或者: from tensorflow.models.rnn.rnn import bidirectional_rnn [as 別名]
def __init__(self, config):
sent_len = config.sent_len
batch_size = config.batch_size
vocab_size = config.vocab_size
embed_size = config.embed_size
num_layers = config.num_layers
state_size = config.state_size
keep_prob = config.keep_prob
self.input_data = tf.placeholder(tf.int32, [batch_size, sent_len])
self.lengths = tf.placeholder(tf.int64, [batch_size])
self.targets = tf.placeholder(tf.float32, [batch_size, 1])
# Get embedding layer which requires CPU
with tf.device("/cpu:0"):
embeding = tf.get_variable("embeding", [vocab_size, embed_size])
inputs = tf.nn.embedding_lookup(embeding, self.input_data)
#LSTM 1 -> Encode the characters of every tok into a fixed dense representation
with tf.variable_scope("rnn1", reuse=None):
cell = rnn_cell.LSTMCell(state_size, input_size=embed_size, initializer=tf.contrib.layers.xavier_initializer())
back_cell = rnn_cell.LSTMCell(state_size, input_size=embed_size, initializer=tf.contrib.layers.xavier_initializer())
cell = rnn_cell.DropoutWrapper(
cell, input_keep_prob=keep_prob,
output_keep_prob=keep_prob)
back_cell = rnn_cell.DropoutWrapper(
back_cell, input_keep_prob=keep_prob,
output_keep_prob=keep_prob)
cell = rnn_cell.MultiRNNCell([cell] * num_layers)
backcell = rnn_cell.MultiRNNCell([back_cell] * num_layers)
rnn_splits = [tf.squeeze(input_, [1]) for input_ in tf.split(1, sent_len, inputs)]
# Run the bidirectional rnn
outputs, last_fw_state, last_bw_state = rnn.bidirectional_rnn(
cell, backcell, rnn_splits,
sequence_length=self.lengths,
dtype=tf.float32)
sent_out = tf.concat(1, [last_fw_state, last_bw_state])
#sent_out = outputs[-1]
#sent_out = tf.add_n(outputs)
output_size = state_size*4
with tf.variable_scope("linear", reuse=None):
w = tf.get_variable("w", [output_size, 1])
b = tf.get_variable("b", [1], initializer=tf.constant_initializer(0.0))
raw_logits = tf.matmul(sent_out, w) + b
self.probabilities = tf.sigmoid(raw_logits)
self.cost = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(raw_logits, self.targets))
#Calculate gradients and propagate
#Aggregation method 2 is really important for rnn per the tensorflow issues list
tvars = tf.trainable_variables()
self.lr = tf.Variable(0.0, trainable=False) #Assign to overwrite
optimizer = tf.train.AdamOptimizer()
grads, _vars = zip(*optimizer.compute_gradients(self.cost, tvars, aggregation_method=2))
grads, self.grad_norm = tf.clip_by_global_norm(grads,
config.max_grad_norm)
self.train_op = optimizer.apply_gradients(zip(grads, _vars))
示例2: BiRNN
# 需要導入模塊: from tensorflow.models.rnn import rnn [as 別名]
# 或者: from tensorflow.models.rnn.rnn import bidirectional_rnn [as 別名]
def BiRNN(x, weights, biases):
# Prepare data shape to match `bidirectional_rnn` function requirements
# Current data input shape: (batch_size, n_steps, n_input)
# Permuting batch_size and n_steps
x = tf.transpose(x, [1, 0, 2])
# Reshape to (n_steps*batch_size, n_input)
x = tf.reshape(x, [-1, n_input])
# Split to get a list of 'n_steps' tensors of shape (batch_size, n_hidden)
x = tf.split(0, n_steps, x)
# Define lstm cells with tensorflow
# Forward direction cell
lstm_fw_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Backward direction cell
lstm_bw_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Get lstm cell output
'''
????,????????????lstm_cell???????????bidirectional_rnn??????,?????????feed???back
'''
outputs = rnn.bidirectional_rnn(lstm_fw_cell, lstm_bw_cell, x,
dtype=tf.float32)
# Linear activation, using rnn inner loop last output
return tf.matmul(outputs[-1], weights['out']) + biases['out']