![enter image description here](https://i.stack.imgur.com/Rp69X.png)
Код основан на вышеуказанной архитектуре. Он использует кодировщик (описанная выше часть) с в основном сверточными слоями, но также использует InceptionResNetv2 в качестве средства извлечения признаков. Он использует 1000 сплющенных объектов в качестве вектора объектов из InceptionResNetv2 и выполняет слияние с кодером, а затем использует декодер.
Если вы наберете go в строке 93 (сгенерировать обучающие данные), вы найдете функцию.
def image_a_b_gen(batch_size):
for batch in datagen.flow(Xtrain, batch_size=batch_size):
grayscaled_rgb = gray2rgb(rgb2gray(batch))
embed = create_inception_embedding(grayscaled_rgb) # this is where the 1000 length feature vector is extracted
lab_batch = rgb2lab(batch)
X_batch = lab_batch[:,:,:,0]
X_batch = X_batch.reshape(X_batch.shape+(1,))
Y_batch = lab_batch[:,:,:,1:] / 128
yield ([X_batch, create_inception_embedding(grayscaled_rgb)], Y_batch)
create_inception_embedding
Функция выполняет извлечение функции, наконец, объединение завершено.
# Fusion
fusion_output = RepeatVector(32 * 32)(embed_input)
fusion_output = Reshape(([32, 32, 1000]))(fusion_output)
Здесь вектор признаков повторяется на выходе энкодера, как показано на схеме.