使用 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).

的数组