2016-12-16 7 views
1

私は147クラスの問題のために私のコスト関数の一部として働く "softmax_cross_entropy_with_logits"を得ることに取り組んでいます。私は "sigmoid_cross_entropy_with_logits"で動作するコードを持っていますが、softmaxに移動したいと思います。Tensorflow R0.12 softmax_cross_entropy_with_logits ASSERTエラー

私は、ランク3からランク2に再成形してコードを稼働させる試みをいくつか試してみました。私はノートブックを介していくつかのおもちゃのコードを試して、softmax_cross ....はエラーを主張していません。また、float32をfloat64にキャストしようとしましたが(私のノートブックの例では64ビットを使用していましたが)、エラーをアサートしました。ここで

は、おもちゃのコードです:ここで

y_hat_softmax = tf.nn.softmax(y_hat) 
sess.run(y_hat_softmax) 
# array([[ 0.227863 , 0.61939586, 0.15274114], 
#  [ 0.49674623, 0.20196195, 0.30129182]]) 

y_true = tf.convert_to_tensor(np.array([[0.0, 1.0, 0.0],[0.0, 0.0, 1.0]])) 
sess.run(y_true) 
# array([[ 0., 1., 0.], 
#  [ 0., 0., 1.]]) 

loss_per_instance_2 = tf.nn.softmax_cross_entropy_with_logits(y_hat, y_true) 
sess.run(loss_per_instance_2) 
# array([ 0.4790107 , 1.19967598]) 

cross_ent = tf.nn.softmax_cross_entropy_with_logits(y_hat, y_true) 
print sess.run(cross_ent) 
#[ 0.4790107 1.19967598] 
print y_hat 
#Tensor("Const:0", shape=(2, 3), dtype=float64) 
print y_true 
#Tensor("Const_1:0", shape=(2, 3), dtype=float64) 
total_loss_2 = tf.reduce_mean(cross_ent) 
sess.run(total_loss_2) 
# 0.83934333897877922 

は、私のコードの断片である:(サイズは以下のエラーで印刷されている)

 self.error0  = tf.nn.softmax_cross_entropy_with_logits(tf.to_double(self.outputSplit0), tf.to_double(self.YactSplit0), "SoftMax0") 
     self.error1  = tf.nn.softmax_cross_entropy_with_logits(self.outputSplit1, self.YactSplit1, "SoftMax1") 
     self.error  = self.error0 + self.error1 

私がやろうとしています私は2つのエンコードを持っています」各単語の単語を別々に計算しようとしていますが、まだ動作しませんでした。上記の最初の行にエラーが発生しました:

self.outputSplit0 Tensor("LSTM/Reshape_2:0", shape=(8000, 147), dtype=float32) 
self.YactSplit0 Tensor("LSTM/Reshape_4:0", shape=(8000, 147), dtype=float32) 
Traceback (most recent call last): 
    File "modelbuilder.py", line 352, in <module> 
    brain.create_variables() 
    File "/home/greg/Model/LSTM_qnet.py", line 58, in create_variables 
    self.error0  = tf.nn.softmax_cross_entropy_with_logits(tf.to_double(self.outputSplit0), tf.to_double(self.YactSplit0), "SoftMax0") 
    File "/home/greg/tensorflow/_python_build/tensorflow/python/ops/nn_ops.py", line 1436, in softmax_cross_entropy_with_logits 
    precise_logits = _move_dim_to_end(precise_logits, dim, input_rank) 
    File "/home/greg/tensorflow/_python_build/tensorflow/python/ops/nn_ops.py", line 1433, in _move_dim_to_end 
    0, [math_ops.range(dim_index), math_ops.range(dim_index + 1, rank), 
    File "/home/greg/tensorflow/_python_build/tensorflow/python/ops/math_ops.py", line 1094, in range 
    assert all(arg.dtype in dtype_hierarchy for arg in [start, limit, delta]) 
AssertionError 

ここで何が起こっている可能性がありますか?エラーは "範囲"機能からのもので、私が間違ったことを理解できません。

答えて

1

softmax関数に渡す3番目の引数は暗黙的にディメンションとみなされますが、代わりにその名前を渡すと、アサーションがトリガされます。パラメータ名を関数に渡す必要があります。

tf.nn.softmax_cross_entropy_with_logits(tf.to_double(self.outputSplit0), tf.to_double(self.YactSplit0), name = "SoftMax0") 
関連する問題