簡體   English   中英

Tensorflow RNN PTB教程測試方法和狀態重置不是錯誤的嗎?

[英]Isn't Tensorflow RNN PTB tutorial test measure and state reset wrong?

我對Tensorflow PTB RNN教程代碼ptb_word_lm.py有兩個問題。 以下代碼塊來自代碼。

  1. 每個批次都可以重置狀態嗎?

     self._initial_state = cell.zero_state(batch_size, data_type()) with tf.device("/cpu:0"): embedding = tf.get_variable( "embedding", [vocab_size, size], dtype=data_type()) inputs = tf.nn.embedding_lookup(embedding, input_.input_data) if is_training and config.keep_prob < 1: inputs = tf.nn.dropout(inputs, config.keep_prob) outputs = [] state = self._initial_state with tf.variable_scope("RNN"): for time_step in range(num_steps): if time_step > 0: tf.get_variable_scope().reuse_variables() (cell_output, state) = cell(inputs[:, time_step, :], state) outputs.append(cell_output) 

    在第133行中,我們將初始狀態設置為零。 然后,在第153行,我們將零狀態用作rnn步驟的起始狀態。 這意味着批次的每個開始狀態都設置為零。 我相信,如果要應用BPTT(通過時間反向傳播),則應該對完成先前數據的步驟進行外部(非零)狀態輸入,例如有狀態RNN(在Keras中)。

    我發現將起始狀態重置為零實際上是可行的。 但是,為什么有這種工作原理有任何理論背景(或論文)?

  2. 這樣測量測試的困惑度可以嗎?

     eval_config = get_config() eval_config.batch_size = 1 eval_config.num_steps = 1 

    與上一個問題相關...該模型將每個批次的初始狀態固定為零。 但是,在337〜338行中,我們將批次大小設為1,將num step 1用於測試配置。 然后,對於測試數據,我們將每次都放入單個數據,並在不使用context(!)的情況下預測下一個數據,因為每批的狀態為零(只有一個時間步長)。

    這是對測試數據的正確度量嗎? 是否所有其他語言模型論文都在預測沒有上下文的下一個單詞時測量測試的困惑?

我運行了這段代碼,並得到了與代碼所說的以及原始論文說的相似的結果。 如果此代碼是錯誤的(希望不是),您是否知道如何復制紙張結果? 如果我修改了問題,也許可以提出請求請求。

關於(1),代碼執行(cell_output, state) = cell(inputs[:, time_step, :], state) 這會將下一個時間步的狀態分配為該時間步的輸出狀態。

當開始一個新的批處理時,您應該獨立於到目前為止所做的計算(請注意批處理之間的區別,批處理是完全不同的示例,並且時間步序列相同)。

關於Re(2),大部分時間使用上下文。

暫無
暫無

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

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