Я бы хотел создать свой собственный слой в Керасе. Чтобы быть более точным, я хотел бы создать простой слой свертки, используя только библиотеку NumPy (без части TensorFlow). У меня есть несколько причин для этого - во-первых, для изучения чего-то нового, а во-вторых, у меня есть идея, как изменить этот слой, поэтому я должен написать его с нуля. Чтобы упростить задачу, мы можем предположить, что мне нужен только сверточный слой с размером ядра 3x3 и значением по умолчанию для других параметров.
Я знаю, что должен опираться на: https://keras.io/layers/writing-your-own-keras-layers/
В разделе def build(self, input_shape):
я должен добавить веса. Сверточному слою требуется filters
кратная матрица ядра размером 3х3.
В разделе def call(self, x):
я могу использовать эти веса. Но у меня есть некоторые проблемы с этим.
Проблемы:
Мне нужно получить что-то вроде скольжения по входу - типичная задача сверточного слоя (перемещение матрицы 3x3 по изображению). Но я не могу этого сделать, потому что x
в def call(self, x):
имеет ?
или None
в первом значении в shape
. Я знаю, что это batch_size, но из-за этого я не могу использовать цикл для этого тензора. Так как же мне получить все данные (числа) из x
, чтобы выполнить некоторые операции с их использованием?
Может быть, у вас есть несколько общих советов, как я могу создать свой собственный сверточный слой с нуля в Керасе?
Для меня проблема не в том, чтобы написать «Сверточный слой» в виде кучи (есть материалы по этому поводу, например: https://github.com/Eyyub/numpy-convnet), а в том, чтобы пометить его с Keras без использования TensorFlow backend.