簡體   English   中英

tensorflow:LSTM 單元中變量的初始值設定項

[英]tensorflow: Initializer for variable in LSTM cell

我正在嘗試構建一個 RNN 來預測輸入數據的情緒是正面還是負面。

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

有人可以向我解釋這個錯誤嗎?

問題是您(很可能)正在向網絡提供原始輸入文本。 這不在您的代碼段中,但錯誤表明<dtype: 'string'>

ValueError: < dtype : 'string'> 的變量 rnn/basic_lstm_cell/kernel 的初始化程序是必需的

類型是從 LSTM 單元獲得的輸入推導出來的。 內部 LSTM 變量( kernelbias )使用默認初始化程序進行初始化,該初始化程序(至少現在)只能處理浮點和整數類型,但無法處理其他類型。 在您的情況下,類型是tf.string ,這就是您看到此錯誤的原因。

現在,您應該做的是將輸入的句子轉換為實向量。 最好的方法是通過詞嵌入,例如word2vec ,但也可以使用簡單的詞索引。 看看這篇文章,特別是他們如何處理文本數據。 還有一個完整的工作代碼示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM