Как отбросить последнюю строку и последний столбец в тензор с помощью Keras Tensorflow - PullRequest
1 голос
/ 09 июня 2019

Допустим, у меня есть тензор (None, 2, 56, 56, 256). Теперь я хочу получить свой тензор с формой (None, 2, 55, 55, 256), отбросив последний столбец и последний ряд. Как я могу добиться этого с помощью Keras / Tensorflow?

1 Ответ

1 голос
/ 09 июня 2019

В тензорном потоке мы можем разрезать тензоры, используя 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
])
...