0

64x64x64 の 3D 画像があるとします。長さ 64 のベクトル x もあります。

次のように「argmax(x)」レイヤーを取得したい:

2d_image = 3d_image[:,argmax(x),:]

より正確な(テンソルフローの場合):

def extract_slice(x,3d_image):
     slice_index = tf.math.argmax(x,axis=1,output_type=tf.dtype.int32) #it has to be int for indexing
     return 3d_image[:,slice_index,:]

エラーは次のとおりです。

Only integers, slices (`:`), ellipsis (`...`), tf.newaxis (`None`) and scalar tf.int32/tf.int64 tensors are valid indices, got <tf.Tensor 'ArgMax_50:0' shape=(None,) dtype=int32>

パラメータの np.shape は次のとおりです。

3d_image形状は(None, 64, 64, 64, 1)

×の形は(None, 64)

slice_index 形状は(None,)

-> 3d_image 形状の ,1 次元は、それが配列からのサンプルであるためです..問題ではないと思います

None 形状は不明なバッチサイズであることは知っていますが、他の形状は優れているように見えます..では、何が問題なのですか?

私が理解していることから、インデックスは int32 ではないように見えますが、実際に tf.int にキャストしたので、何が問題になるのでしょうか?? たぶん int32 は tf.int32 とは異なりますか? または、私が使用したインデックスメソッドがテンソルフローで有効ではないのでしょうか? 多分それはそのような関数であるべきです: tf.index(image,[:,slice_index,:])..?

ありがとう!

4

1 に答える 1