Как остановить Keras от упорядочения вывода слоя? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь создать слой Conv2D в Keras (с бэкэндом тензорного потока), и я заметил, что его вывод упорядочен по возрастанию.

Например, рассмотрим простой ввод, такой как этот:

_input = np.arange(2 * 2).reshape(2, 2)

, что приводит к:

[[0 1]
 [2 3]]

Если мы передадим переменную _input в сверточный слой, подобный этому:

from keras.layers import Input, Conv2D
from keras.activations import relu
from keras import Model
import numpy as np

filters = 2
filter_size = 1

_weights = [np.reshape([[2 for _ in range(filters)] for _ in range(filter_size*filter_size)], (filter_size, filter_size, 1, filters)), np.reshape([0 for _ in range(filters)], (filters,))]  # weights for Keras, main weight is array of 2`s while bias weight is array of 0's

keras_input = Input(shape=(2, 2, 1), dtype='float32')

keras_conv = Conv2D(filters=filters, kernel_size=filter_size, strides=(1, 1), activation=relu, padding='valid')(keras_input)

model = Model(inputs=[keras_input], outputs=keras_conv)
model.layers[1].set_weights([_weights[0], _weights[1]])

print(model.predict([_input.reshape(1, 2, 2, 1)]))

Мы получили бы упорядоченный вывод:

[[[[0. 0.]
   [2. 2.]]

  [[4. 4.]
   [6. 6.]]]]

Похоже, тензор потока делает что-то вроде этого:

  1. выполняет умножение матриц на входе с каждым фильтром
  2. addсмещение матрицы с первого шага
  3. выполнить упорядочение по возрастанию на выходе второго шага

Я хочу исключить шаг 3-й , чтобы яполучить что-то вроде этого:

[[[[0. 2.]
   [4. 6.]]

  [[0. 2.]
   [4. 6.]]]]

Например, Caffe пропустит упорядочивающую часть, и его выходные данные будут точно такими же, как и вышеприведенные.

Вот как Caffe будет выполнять "свертку"":

[[[[(0*2) + 0 (1*2) + 0]
   [(2*2) + 0 (3*2) + 0]]

  [[(0*2) + 0 (1*2) + 0]
   [(2*2) + 0 (3*2) + 0]]]]

, что равно:

[[[[0. 2.]
   [4. 6.]]

  [[0. 2.]
   [4. 6.]]]]

Это сделано, без изменения порядка нашего ввода, как вы можете видеть.

Кратко

Как мне остановить Tensorflow (или Keras) от упорядочения активации сверточных слоев?Есть ли какой-нибудь параметр, который я могу передать, чтобы устранить этот возрастающий порядок?

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...