2017-12-21 3 views
0

저는 rnn을 만들고 tf.nn.dynamic_rnn을 사용하여 출력과 상태를 생성합니다. 다음 코드는 (TF 버전 1.3)는 상기 입력 텐서가 배치 크기 = 1로 항상 때문에RNN을 사용하여 일련의 텐서 생성하기

import tensorflow as tf  
def lstm_cell(): 
     return tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(128), output_keep_prob=0.7) 

cell= tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(3)]) 

initial_state= cell.zero_state(1, tf.float32) 

layer = tf.placeholder(tf.float32, [1,1,36]) 

outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=layer, initial_state=initial_state) 

상기 initial_state 및 상태도 = 1 층 BATCH_SIZE의 입력 배치 크기를 갖는다 1뿐만 아니라 각 셀에 대해 36 개의 노드 (임베디드 시퀀스의 크기)가 있습니다. 각 레이어의 lstm_size는 128입니다.

문제는 내가 rnn 셀을 루프 할 때 발생합니다.

rnn_outputs_sequence=outputs 
for i in range(1, num_pics, 1): 
    outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=outputs, initial_state=state) 
    rnn_outputs_sequence=tf.concat((rnn_outputs_sequence, outputs),axis=1) 

rnn_outputs_sequence이 형상을 가질 것으로 예상된다 [1 num_pics는 36] .However이 오류를 트리거 :

Trying to share variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/kernel, but specified shape (256, 512) and found shape (164, 512). 

I이 형상 [164, 512]을 알아낼 수 없다. 누구든지 도와 줄 수 있습니까? 감사합니다. .

답변

0
import tensorflow as tf 
def lstm_cell(): 
    return tf.contrib.rnn.DropoutWrapper(tf.contrib.rnn.BasicLSTMCell(128), output_keep_prob=0.7) 

cell= tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(2)]) 

initial_state= cell.zero_state(1, tf.float32) 

layer = tf.placeholder(tf.float32, [1,1,36]) 

outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=layer, initial_state=initial_state) 

outputs = tf.reshape(outputs, shape=[1, -1]) 
outputs = tf.layers.dense(outputs, 36,\ 
           kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False)) 
outputs = tf.reshape(outputs, shape=[1, 1, -1]) 
rnn_outputs_sequence=outputs 
print(outputs) 
for i in range(1, 16, 1): 
    outputs, state=tf.nn.dynamic_rnn(cell=cell, inputs=outputs, initial_state=state) 
    outputs = tf.reshape(outputs, shape=[1, -1]) 
    outputs = tf.layers.dense(outputs, 36,\ 
           kernel_initializer=tf.contrib.layers.xavier_initializer(uniform=False)) 
    outputs = tf.reshape(outputs, shape=[1, 1, -1]) 
    print(outputs) 
    rnn_outputs_sequence=tf.concat((rnn_outputs_sequence, outputs),axis=1) 
print(rnn_outputs_sequence) 
관련 문제