bugfix> python > 投稿

Tensorflowの状況があります。 Tensorflow操作を使用して特定のタイプの出力を取得したいと思います。

テンソル変数があるとします:

"input" = (2, 4, 4)
[[[ 0.6036284   0.0281072   0.78739774  0.79748493]
  [ 0.92121416  0.31211454  0.75201935  0.49418229]
  [ 0.99500716  0.35610485  0.78246456  0.32932794]
  [ 0.44941011  0.33340591  0.56897491  0.16929366]]
 [[ 0.82108098  0.50557786  0.76569009  0.04855939]
  [ 0.55340368  0.11384677  0.63739866  0.09481387]
  [ 0.52711403  0.5621863   0.44211769  0.85780412]
  [ 0.15423198  0.80663997  0.86868405  0.48221472]]]

aから抽出される要素のインデックスを含む別のテンソル変数があります。

"idx" = (2, 2)
[[2 0]
 [2 0]]

「idx」を使用して「input」をスライスすると、結果は次のようになるクエストを作成したいと思います。スライスは2次元に基づいて行われることに注意してください。

Output: (2, 2, 4)
 [[[ 0.99500716  0.35610485  0.78246456  0.32932794]
  [ 0.6036284   0.0281072   0.78739774  0.79748493]]
 [[ 0.52711403  0.5621863   0.44211769  0.85780412]
  [ 0.82108098  0.50557786  0.76569009  0.04855939]]]

「input」と「idx」が動的に入力されるTensorflowを使用して、同様の操作を実現したいと思います。

「idx」を明示的に言及するとき、私が考えることができる1つの方法は次のとおりです

idx = [[[0,2],[0,0]], [[1,2],[1,0]]]
output = tf.gather_nd(input, idx)

しかし、idx = [[[0,2]、[0,0]]、[[1,2]、[1,0]]]を動的に設定されたidx = [[2 0]から構築する方法がわかりません。 [2 0]]

さまざまな組み合わせを使用してtf.map_fnを使用しようとしましたが、それでも解決策を見つけることができませんでした。

任意のヘルプが高く評価されます..ありがとう

回答 1 件
  • 次の方法で完全なインデックスを作成できます。

    #Use meshgrid to get [[0 0] [1 1]]
    mesh = tf.meshgrid(tf.range(indices.shape[1]), tf.range(indices.shape[0]))[1]
    #Stack mesh and the idx
    full_indices = tf.stack([mesh, indices], axis=2)
    #Output
    # [[[0 2] [0 0]]
    #  [[1 2] [1 0]]]
    
    

あなたの答え