2017-11-27 9 views
1

テンソルxiの形状は(?, 20, 10)であり、テンソルy_dataの形状は(?, 20, 1)です。 tf.exp(xi[y_data] - tf.log(tf.reduce_sum(xi, axis=2))のようにするには、y_dataテンソルを使用してxiテンソルの「インデックスを作成」します。テンソルを別のテンソルでインデックス化する

など。 tf.exp(xi[:, :, 4] - tf.log(tf.reduce_sum(xi, axis=2)))はテンソル形状が(?, 20)になります。私はちょうど別のテンソルのインデックスを、ここでは4にしたいと思っています。

ありがとうございます!この場合

答えて

1

、私が最も効率的なたぶん私は

result = tf.zeros(tf.shape(y_data), tf.float32) 
for i in range(10): 
    result = tf.where(tf.equal(y_data, i), tf.exp(xi[:, :, i:i+1]), result) 
result = tf.reshape(result, [-1, 20]) 
result -= tf.log(tf.reduce_sum(xi, axis=2)) 

0から9

に行くと仮定します y_dataに使用可能な値でループを使用していないだろうが、それは私が考えることができる唯一の方法です。

+0

ありがとうございます、あなたの答えは私にそれを解決する別の方法を考えさせました。私は 'y_data'を形の' '(?、20、10)'のワンホットテンソルとして得ることができました。このようにして、インデックス付けは乗算と減算によって行うことができます: 'tf.reduce_sum(xi * y_data、axis = 2)'。 – user1305241

関連する問題