2016-08-01 3 views
0

データセットでエンコーダ/デコーダモデルを実行しようとしています。以下はサンプルコードですTensorflow basic_rnn_seq2seq TypeError:予想されるint32、 'float'型の-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は、単純に言えばids(整数)です。次に、すべてのプロセスはbasic_rnn_seq2seq APIの内部で処理されます。 – user3480922

答えて

0

問題の根本的なケースは、Tensorflowのrnn_cell.pyクラスである:あなたは、異なるタイプ(tf.int32とtf.float32)

に持つ2つの変数を持って

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

問題を解決するために、ターゲットをtf.int32(Seq2Seqモデルで必要)として、エンコーダとデコーダの入力にtf.float32を使用しました。このような

何かが動作することがあります。問題は、TFのv0.12.1に再現されたことを

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) 

注意。私はrnn_cell.pyの現在のマスターをチェックしましたが、それは全く異なっています。だから私はその問題が後のリリースで消え去るかもしれないと仮定します。

0

これは、混乱しているエラーメッセージの問題です。実際の原因は、tf.get_variable()を呼び出しても、デフォルトのイニシャライザを設定しないと、エラーメッセージが混乱します。 tf.zero_initializer()などを使用すると、このエラーを抑制できます。

関連する問題