Я работаю над игрушечным проектом 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, такие как шаги / отступы, но мне не ясно, смогу ли / как я заменить ядро этого слоя всей многослойной «подмоделью».
Некоторые свойства, которые мне нужны:
- «Ядро» должно быть совместно использовано всеми плиточными экземплярами, так что нам нужно обучать только одно ядро.
- Однако мы определяем это ядро, было бы неплохо, если бы оно могло быть выражено в слоях keras
- Оно имеет все функции выборки Conv2d, такие как padding / strides / dilation
Некоторые вещи, которые я пробовал :
- Пользовательская инициализация ядра Keras Conv2D - кажется, требуется, чтобы ядро было сокращено до одного тензора?
- Используется
K.tile
, но это, кажется, требует мне нужно переопределить большие части Conv2d, и неясно, являются ли созданные переменные общими или новыми экземплярами