Измените метод заполнения в модели keras VGG19 - PullRequest
0 голосов
/ 12 февраля 2020

Keras API-интерфейс tenorflow удобен для построения модели CNN.

tf.keras.layers.Conv2D предоставляет только 2 метода заполнения, один из которых «тот же», который дополняет нули до границы тензора. Убедитесь, что разрешения входа и выхода слоя свертки могут быть одинаковыми. Другим является 'valid', у которого нет заполнения, поэтому разрешение тензора может быть уменьшено после свертки.

Но у меня возникла проблема, когда я загружаю модель VGG19 с предварительной подготовкой и хочу изменить метод заполнения слоя свертки от дополнения нулями («тот же» метод tf.keras.layers.Conv2D) до отражения.

Единственный способ, которым я подумал, - это использовать метод tf.pad () перед входом в VGG conv-layer, и обрезать выходной тензор. Этот метод должен настроить поток данных в каждом слое и будет простой работой.

Например, я создаю VGG19 net, и я могу просто вызвать его для обработки моего тензора:

import tensorflow as tf
from tensorflow.keras.applications import VGG19
import numpy as np

# create vgg net.
vggnet=VGG19(include_top=False, weights='imagenet')
# create input tensor.
inputdata=np.random.normal(size=[1,512,512,3])
# simply call it to process.
outputdata=vggnet(inputdata)

Но если мы хотим добавить пользовательский слой заполнения перед сверткой, мы нужно переопределить функцию call () в vg gnet, которая будет извлекать все слои в VGG и определять поток данных для каждого слоя.

Есть ли какой-нибудь лучший метод, который может достичь этого? Спасибо.

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