LSTM RNN
tf.nn.rnn_cell.BasicLSTMCell.
__call__(inputs, state) # inputs [batch_size, input_size] #[:, t, :]
__init__(num_units, ...)
output_size
state_size
zero_state(batch_size, dtype)
import tensorflow as tf
import numpy as np
import sys
from tensorflow.examples.tutorials.mnist import input_data
import os
datai = tf.placeholder(tf.float32, shape=[3,10, 28])
label = tf.placeholder(tf.float32, [None, 10])
data = tf.transpose(datai, [1, 0, 2])
data = tf.reshape(data, [-1, 28])
data = tf.split(0, 10, data)
lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(128, state_is_tuple=True)
print (lstm_cell.state_size)
init_state = [tf.zeros([3, 128])]*2
#init_state = [(init_state, init_state)]*3
#init_state = tf.zeros([3, 128])
#init_state = tf.split(0, 3, init_state)
outx = []
#ini = lstm_cell.zero_state(3, dtype=tf.float32) # ([3, 128], [3, 128])
#print ini[0].get_shape().as_list()
with tf.variable_scope("LSTM") as scope:
for t in xrange(10):
if t> 0:
scope.reuse_variables()
out, init_state = lstm_cell(data[t], init_state)
#datax = tf.split(0, 3, data[t])
#for per in xrange(3):
# if per>0 or t>0:
# scope.reuse_variables()
# #print datai[per, t, :].get_shape()
# out, init_state[per] = lstm_cell(datax[per], init_state[per]) ##
# print init_state[per][0].get_shape()
outx.append(out)
#outs, state = tf.nn.rnn(lstm_cell, input[list-[batch_size, input_size]] ,initialize)
#outs, state = tf.nn.dynamic_rnn(lstm_cell, input[tensor-[batch_size, step_n, input_size]], initial_state)
inputdata = np.random.randn(3,10,28)
with tf.Session() as sess:
sess.run( tf.initialize_all_variables())
o = sess.run(outx, feed_dict = { datai: inputdata})
print np.array(o).shape
----------------------------------------------reference----------------------------------------------
http://blog.csdn.net/mydear_11000/article/details/52414342