使用 Keras 对张量进行切片
Slicing a tensor with Keras
我有一个 3D 张量。它不是图像,但为了使用与 Keras 相同的约定,我将其视为图像,即 height x width x channels
.
我已经对这个张量应用了二维卷积,它是一系列层的输入。但是,我想单独保留最后一个频道,以便稍后将其连接起来。或许用代码更容易看出来:
l = [64, 32, 16, 8]
inputs = Input(shape=(x,y,z))
we_are_here = Sequential([Conv2D(z, (x, y), padding='same') for _ in l])(inputs)
last_channel = SomethingSomething(we_are_here) # How do I do this?
long_path = Sequential(lots_of_layers)(we_are_here)
res = Concatenate([Flatten()(layer) for layer in [long_path, last_channel]]
outputs = Sequential([Dense(i) for i in l])(res)
我找不到分离最后一个频道的方法。有几个切片、拆分、裁剪等操作,但 none 似乎有帮助。
如果您熟悉常规 Python 中的列表切片,array-like 类型支持相同的行为,但推广到其他维度。 arr[:, :, -1]
将获得沿三维的最后一个切片,而 arr[:, :, :-1]
将获得除最后一个切片之外的所有切片。
请注意,arr.shape
是 (a, b, c)
,arr[:, :, -1]
将 return 形状为 (a, b)
的数组。如果需要保留维度,arr[:, :, [-1]]
将 return 一个形状为 (a, b, 1)
的数组。 arr[:, :, :-1]
将 return 一个形状为 (a, b, c - 1)
.
的数组
我有一个 3D 张量。它不是图像,但为了使用与 Keras 相同的约定,我将其视为图像,即 height x width x channels
.
我已经对这个张量应用了二维卷积,它是一系列层的输入。但是,我想单独保留最后一个频道,以便稍后将其连接起来。或许用代码更容易看出来:
l = [64, 32, 16, 8]
inputs = Input(shape=(x,y,z))
we_are_here = Sequential([Conv2D(z, (x, y), padding='same') for _ in l])(inputs)
last_channel = SomethingSomething(we_are_here) # How do I do this?
long_path = Sequential(lots_of_layers)(we_are_here)
res = Concatenate([Flatten()(layer) for layer in [long_path, last_channel]]
outputs = Sequential([Dense(i) for i in l])(res)
我找不到分离最后一个频道的方法。有几个切片、拆分、裁剪等操作,但 none 似乎有帮助。
如果您熟悉常规 Python 中的列表切片,array-like 类型支持相同的行为,但推广到其他维度。 arr[:, :, -1]
将获得沿三维的最后一个切片,而 arr[:, :, :-1]
将获得除最后一个切片之外的所有切片。
请注意,arr.shape
是 (a, b, c)
,arr[:, :, -1]
将 return 形状为 (a, b)
的数组。如果需要保留维度,arr[:, :, [-1]]
将 return 一个形状为 (a, b, 1)
的数组。 arr[:, :, :-1]
将 return 一个形状为 (a, b, c - 1)
.