Если вы думаете немного творчески, вам вообще не нужен слой ввода шума.
Мы можем использовать GaussianNoise()
из tf.keras, но для этого нужен входной тензор, технически мы должны передать ему ones
вектор. Мы можем заставить промежуточные выходные функции VGG умножаться на нулевые ядра плотного слоя, затем мы можем добавить к нему ones
смещение, так что мы получим наш вектор-заполнитель ones
, который будет передан в GaussianNoise
.
Теперь вы можете забыть о любом сложном генераторе данных, просто используйте свои обычные генераторы данных или напрямую numpy массив с fit
.
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
import tensorflow as tf
ip = Input((224,224,3))
base = VGG16((224,224,3))(ip)
# passing vgg features to a zero vector, making everything zero and then adding bias ones to make the output is always 1
dense_ones = Dense(1000, activation='linear', kernel_initializer = tf.keras.initializers.Zeros(), bias_initializer = tf.keras.initializers.Ones())(base)
gaussian = GaussianNoise(0.4)(dense_ones)
concat = Concatenate()([base, gaussian])
learn_feature = Dense(128, activation = 'relu')(concat) # change this part based on your needs
classification = Dense(2, activation = 'sigmoid')(learn_feature)
model = Model(ip, classification)
Model: "model_5"
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_19 (InputLayer) [(None, 224, 224, 3) 0
__________________________________________________________________________________________________
vgg16 (Model) (None, 1000) 138357544 input_19[0][0]
__________________________________________________________________________________________________
dense_2 (Dense) (None, 1000) 1001000 vgg16[1][0]
__________________________________________________________________________________________________
gaussian_noise_5 (GaussianNoise (None, 1000) 0 dense_2[0][0]
__________________________________________________________________________________________________
concatenate_4 (Concatenate) (None, 2000) 0 vgg16[1][0]
gaussian_noise_5[0][0]
==================================================================================================
Total params: 139,358,544
Trainable params: 139,358,544
Non-trainable params: 0
___________________________________