2017-09-26 13 views
0

私自身の基本seq2seqクラシファイアを作成しようとしています。私はtf.nn.dynamic_rnnを使ってこれを行い、そのコードを以下に示します。しかし、テンソルの形に問題があるようですが、tf.nn.dynamic_rnnに送っています。私がこれをやっているのは、seq2seqに関するテンソルフローの文書化が非常に大変だからです。tf.nn.dynamic_rnn seq2seqのシェイプエラー

import numpy as np 
source_batch = np.random.randint(x_letters, size=[batch_size, x_seq_length]) 
target_batch = np.random.randint(y_letters, size=[batch_size, y_seq_length+1]) 

sess.run(tf.global_variables_initializer()) 
loss = sess.run([loss], 
      feed_dict = {inputs: source_batch, 
         outputs: target_batch[:, :-1], 
         targets: target_batch[:, 1:]}) 

を実行

は私にエラーを与える:ValueError: Cannot feed value of shape (128, 10) for Tensor 'decoding/rnn/transpose:0', which has shape '(128, 10, 32)'

グラフを以下に示す:

import tensorflow as tf 

x_seq_length = 29 
y_seq_length = 10 

x_letters = 60 
y_letters = 13 

epochs = 2 
batch_size = 128 
nodes = 32 
embed_size = 10 

#################### 
# Tensorflow Graph 
#################### 
tf.reset_default_graph() 
sess = tf.InteractiveSession() 

inputs = tf.placeholder(tf.int32, (batch_size, x_seq_length), 'inputs') 
outputs = tf.placeholder(tf.int32, (batch_size, y_seq_length), 'output') 
targets = tf.placeholder(tf.int32, (batch_size, y_seq_length), 'targets') 

input_embedding = tf.Variable(tf.random_uniform((x_letters, embed_size), -1, 1), name='enc_embedding') 
output_embedding = tf.Variable(tf.random_uniform((y_letters, embed_size), -1, 1), name='dec_embedding') 

date_input_embed = tf.nn.embedding_lookup(input_embedding, inputs) 
date_output_embed = tf.nn.embedding_lookup(output_embedding, outputs) 

with tf.variable_scope("encoding") as encoding_scope: 
    lstm_enc = tf.contrib.rnn.BasicLSTMCell(nodes) 
    _, last_state = tf.nn.dynamic_rnn(lstm_enc, dtype=tf.float32,inputs=date_input_embed) 

with tf.variable_scope("decoding") as decoding_scope: 
    lstm_dec = tf.contrib.rnn.BasicLSTMCell(nodes) 
    outputs, _ = tf.nn.dynamic_rnn(lstm_dec, inputs=date_output_embed, initial_state=last_state) 

logits = tf.contrib.layers.fully_connected(outputs, num_outputs=y_letters, activation_fn=None) 

with tf.name_scope("optimization"): 
    loss = tf.contrib.seq2seq.sequence_loss(logits, targets, tf.ones([batch_size, y_seq_length])) 
    optimizer = tf.train.AdamOptimizer().minimize(loss) 

答えて

2

あなたが名前outputs、即ち、プレースホルダとデコーダ出力によって2つの変数を有します。 1つの変数の名前を変更します。

+0

まあ、それは恥ずかしそうです。 –

関連する問題