2017-09-30 4 views
1

入力データの感情を正または負として予測するRNNを構築しようとしています。テンソルフロー:LSTMセルの変数のイニシャライザ

tf.reset_default_graph() 

input_data = tf.placeholder(tf.int32, [batch_size, 40]) 
labels = tf.placeholder(tf.int32, [batch_size, 40]) 

data = tf.Variable(tf.zeros([batch_size, 40, 50]), dtype=tf.float32) 
data = tf.nn.embedding_lookup(glove_embeddings_arr, input_data) 

lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units) 
lstm_cell = tf.contrib.rnn.DropoutWrapper(cell = lstm_cell, output_keep_prob = 0.75) 
value,state = tf.nn.dynamic_rnn(lstm_cell, data, dtype=tf.float32) 

weight = tf.Variable(tf.truncated_normal([lstm_units, classes])) 
bias = tf.Variable(tf.constant(0.1, shape = [classes])) 
value = tf.transpose(value, [1,0,2]) 
last = tf.gather(value, int(value.get_shape()[0]) - 1) 
prediction = (tf.matmul(last, weight) + bias) 



true_pred = tf.equal(tf.argmax(prediction, 1), tf.argmax(labels,1)) 
accuracy = tf.reduce_mean(tf.cast(true_pred,tf.float32)) 

loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=labels)) 
optimizer = tf.train.AdamOptimizer().minimize(loss) 

インタプリタは

ValueError: An initializer for variable rnn/basic_lstm_cell/kernel of <dtype: 'string'> is required 

を返し誰かが私にこのエラーを説明できますか?

+0

これはコード全体の権利ではありませんか? 'sess.run(tf.global_variables_initializer())'のようなものを実行しましたか? – Sraw

+0

はいトレーニング中に実行しました – Dee

答えて

1

問題は、(おそらく)生の入力テキストをネットワークに供給していることです。これはあなたのコードスニペットではありませんが、エラーが<dtype: 'string'>を示しています

ValueError: An initializer for variable rnn/basic_lstm_cell/kernel of <dtype: 'string'> is required

タイプはLSTM電池が得ることの入力から推定されます。インナーLSTM変数(kernelbias)は、デフォルトイニシャライザで初期化されていますが、これは少なくともfloating and integer typesとしか処理できませんが、他のタイプでは失敗します。あなたの場合、タイプはtf.stringです。そのため、このエラーが表示されます。

ここで、入力文を実際のベクトルに変換する必要があります。これを行う最善の方法は、word embedding経由です。 word2vecですが、簡単な単語の索引付けも可能です。 this postを見てください。特に、テキストデータをどのように扱うかを見てください。完全な作業コードの例もあります。

関連する問題