我使用TensorFlow的python API來訓練LSTM的變體。 爲此,我使用tf.while_loop
函數遍歷時間步長。GPU上的TensorFlow nullptr檢查失敗
當在CPU上運行我的腳本,它不會產生任何錯誤消息,但在GPU蟒蛇崩潰是由於:
...tensorflow/tensorflow/core/framework/tensor.cc:885] Check failed: nullptr != b.buf_ (nullptr vs. 00...)
我的代碼的一部分,導致了這個錯誤(當註釋出來,它的工作原理)是在while循環的主體:
...
h_gathered = h_ta.gather(tf.range(time))
h_gathered = tf.transpose(h_gathered, [1, 0, 2])
syn_t = self.syntactic_weights_ta.read(time)[:, :time]
syn_t = tf.expand_dims(syn_t, 1)
syn_state_t = tf.squeeze(tf.tanh(tf.matmul(syn_t, h_gathered)), 1)
...
time
其中零是基於和在每個步驟之後遞增,h_ta
是TensorArray
h_ta = tf.TensorArray(
dtype=dtype,
size=max_seq_len,
clear_after_read=False,
element_shape=[batch_size, num_hidden],
tensor_array_name="fw_output")
和self.syntactic_weights_ta
也是TensorArray
self.syntactic_weights_ta = tf.TensorArray(
dtype=dtype,
size=max_seq_len,
tensor_array_name="fw_syntactic_weights")
self.syntactic_weights_ta = self.syntactic_weights_ta.unstack(syntactic_weights)
我試圖在代碼片段實現基本上是在過去的輸出,存儲在h_ta
加權總和。 最後,我用tf.train.AdamOptimizer
來訓練網絡。
我又測試了劇本,但這次在while循環設置爲False
,它工作在GPU上爲好,但我真的很想知道爲什麼它不與swap_memory=True
工作swap_memory
參數。
我已經打開了一個https://github.com/tensorflow/tensorflow/issues/10083,但不幸的是無法按照您的要求進行詳細說明。我不知道如何在Windows 10上使用調試選項進行構建。關於最小代碼示例,我會盡量延長我發佈的代碼,以便獲得時間。 – hatero