В тензорном потоке мы можем разрезать тензоры, используя python обозначение среза .Итак, учитывая тензор X
с формой (20,2,56,56,256)
скажем (как вы уже описали, но с размером пакета 20), мы можем легко нарезать его, взяв все, кроме последней «строки» во 2-м и 3-м измерении, следующим образом:
X[:,:,:-1,:-1,:]
Обратите внимание на использование :-1
для обозначения «все перед последней« строкой »».
Учитывая это ноу-хау для нарезки тензора в тензорном потоке, нам просто нужно адаптироватьсяэто для керас.Мы могли бы, конечно, написать полноценный пользовательский слой , реализующий это (или, возможно, даже найти там, где кто-то другой написал - я не смотрел, но нарезка довольно распространена, поэтому подозреваю, что кто-то что-то написал где-то!).
Однако, для чего-то такого простого, я бы рекомендовал использовать Лямбда-слой , который мы можем определить следующим образом:
my_slicing_layer = Lambda(lambda x: x[:,:,:-1,:-1,:], name='slice')
И можем использовать внаши модели keras как обычно:
my_model = Sequential([
Activation('relu', input_shape=(2,56,56,256)),
my_slicing_layer
])