2016-08-01 138 views
0

我想在數據集上運行編碼器 - 解碼器模型。下面是示例代碼:Tensorflow basic_rnn_seq2seq TypeError:預期的int32,得到類型'浮動'-0.1代替

self._input_data = tf.placeholder(tf.int32, [batch_size, num_steps]) 
self._targets = tf.placeholder(tf.int32, [batch_size, num_steps]) 
enc_inputs.append(self._input_data) #one batch at once 
dec_inputs.append(self._targets) 
model = seq2seq.basic_rnn_seq2seq(enc_inputs, dec_inputs, tf.nn.rnn_cell.BasicLSTMCell(size, state_is_tuple=True)) 

我得到類型不匹配的錯誤(下面提到)。有誰知道解決這個問題?

tensor_util.py, line 290, in _AssertCompatible 
    (dtype.name, repr(mismatch), type(mismatch).__name__)) 
    TypeError: Expected int32, got -0.1 of type 'float' instead. 
+0

似乎,將tf.int32更改爲tf.float32可解決此問題。我不知道爲什麼,但現在程序運行無錯。 – user3480922

+0

當您嘗試將浮點值插入已鍵入爲int32的張量時,會出現類型錯誤。在將數據或圖形發送到後端客戶機執行之前,tensor_util.py用於構建python內的張量。從您的問題中不清楚如何重現您的錯誤。 _input_data如何被初始化?帶有浮點數的值? –

+0

encode_input和decode_input是簡單的單詞ID(整數)。接下來,所有進程都在basic_rnn_seq2seq API內處理。 – user3480922

回答

0

的問題的根本情況是Tensorflow rnn_cell.py類:

with vs.variable_scope(scope or "Linear"): 
    matrix = vs.get_variable("Matrix", [total_arg_size, output_size], dtype=dtype) 

,你有兩個變量,不同類型(tf.int32和tf.float32)

要解決問題,我使用tf.float32編碼器和解碼器輸入,同時保持目標爲tf.int32(Seq2Seq模型要求)。

像這樣的東西可能工作:

self._input_data = tf.placeholder(tf.float32, [batch_size, num_steps]) 
self._targets = tf.placeholder(tf.int32, [batch_size, num_steps]) 
enc_inputs.append(self._input_data) #one batch at once 
dec_inputs.append(self._targets) 

注意的問題重現的TF v0.12.1。我檢查了rnn_cell.py的當前主人,這是完全不同的。所以我認爲這個問題可能會在以後的版本中消失。

0

這是一個混淆錯誤信息的問題。實際的原因是,當您撥打tf.get_variable()但未設置默認初始值設定項時,錯誤消息將會引起混淆。你可以使用tf.zero_initializer()或類似的東西來抑制這個錯誤。

相關問題