如何提取 3d 图像张量的 1 个切片?
how to extract 1 slice of a 3d image tensor?
假设我有一个 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)
x 形状是 (None, 64)
slice_index形状是(None,)
->3d_image 形状的 ,1 维度是因为它是数组中的样本。我认为这无关紧要
我知道None shape是batch size,这个不知道,但是其他的看起来都不错..那有什么问题吗?
据我了解,索引似乎不是 int32,但实际上我确实将其转换为 tf.int 那么可能是什么问题?也许 int32 与 tf.int32 不同?或者我使用的索引方法在 tensorflow 中无效?也许它应该是一个类似这样的函数:
tf.index(图片,[:,slice_index,:])..?
谢谢!
Argmax returns 一维张量。将其转换为标量:
slice_index = tf.reshape(slice_index, ())
假设我有一个 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)
x 形状是 (None, 64)
slice_index形状是(None,)
->3d_image 形状的 ,1 维度是因为它是数组中的样本。我认为这无关紧要
我知道None shape是batch size,这个不知道,但是其他的看起来都不错..那有什么问题吗?
据我了解,索引似乎不是 int32,但实际上我确实将其转换为 tf.int 那么可能是什么问题?也许 int32 与 tf.int32 不同?或者我使用的索引方法在 tensorflow 中无效?也许它应该是一个类似这样的函数: tf.index(图片,[:,slice_index,:])..?
谢谢!
Argmax returns 一维张量。将其转换为标量:
slice_index = tf.reshape(slice_index, ())