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 и определять поток данных для каждого слоя.
Есть ли какой-нибудь лучший метод, который может достичь этого? Спасибо.