Как создать скользящий 2d автоэнкодер в keras? - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над игрушечным проектом Keras / Tensorflow, ориентированным на набор данных MNIST. Я хочу построить что-то вроде сверточной 2D-сети, но вместо набора фильтров я хочу создать плотное векторное представление.

Вот пример модели, которую я использовал для создания автоэнкодера для подвыборка 3x3 входных данных:

model = Sequential()
model.add(Flatten(input_shape=(3, 3)))
model.add(Dense(32, activation='elu'))
model.add(Dense(4, activation='elu'))
model.add(Dense(32, activation='elu'))
model.add(Dense(9, activation='sigmoid'))
model.add(Reshape((3, 3)))

Используя эту модель, я знаю, что топология близка к той, что используется для моего ядра 3x3. Я пытаюсь понять, как воспроизвести / расположить первые три слоя этой модели поверх моего 2D-изображения. Я хотел бы иметь все функции слоя Conv2d, такие как шаги / отступы, но мне не ясно, смогу ли / как я заменить ядро ​​этого слоя всей многослойной «подмоделью».

Некоторые свойства, которые мне нужны:

  1. «Ядро» должно быть совместно использовано всеми плиточными экземплярами, так что нам нужно обучать только одно ядро.
  2. Однако мы определяем это ядро, было бы неплохо, если бы оно могло быть выражено в слоях keras
  3. Оно имеет все функции выборки Conv2d, такие как padding / strides / dilation

Некоторые вещи, которые я пробовал :

  • Пользовательская инициализация ядра Keras Conv2D - кажется, требуется, чтобы ядро ​​было сокращено до одного тензора?
  • Используется K.tile, но это, кажется, требует мне нужно переопределить большие части Conv2d, и неясно, являются ли созданные переменные общими или новыми экземплярами

1 Ответ

1 голос
/ 17 июня 2020

Вам повезло, потому что есть функция tensorflow, которая делает именно то, что вы хотите. Вы ищете tf.image.extract_patches. Вы можете просто поместить его в слой tf.keras.layers.Lambda, чтобы обернуть его слоем tf.keras.layer.Layer. Более чистый способ сделать это - tf.keras.layers.Layer, но требует немного больше усилий. Дополнительную информацию о том, как это сделать, можно найти в документации для tf.keras.layers.Lamba

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