повторно использовать средний слой в качестве входных данных для другой модели в Керасе - PullRequest
0 голосов
/ 27 сентября 2018

Я строю 5-слойный автоэнкодер с Keras.Я сделал модель, которая отображает от входа до выхода, что было хорошо.Я построил другую модель, которая отображает входной сигнал на скрытый кодированный вектор, который работал нормально.Однако затем я попытался создать модель декодирования, которая сопоставляет скрытый кодированный вектор с выходным сигналом, который не работает.

Я знаю, что сначала я должен создать входной слой для декодированной модели, которая создает эту формуно я не могу понять, как получить данные моих кодированных слоев в качестве входных данных для декодированной модели и позволить ей отображаться из кодированного вектора в конечный слой.

from keras.layers import Input, Dense
from keras.models import Model
from keras.datasets import mnist
import numpy as np

(x_train, _), (x_test, _) = mnist.load_data()
(x_train, _), (x_test, _) = mnist.load_data()

# Prepare data and normalize
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape(len(x_train), -1)
x_test = x_test.reshape(len(x_test), -1)

input_size = 784
hidden_size = 128
coded_size = 64

x = Input(shape=(input_size,))
hidden_1 = Dense(hidden_size, activation='relu')(x)
coded =Dense(coded_size, activation='relu')(hidden_1)
hidden_2 = Dense(hidden_size, activation='relu')(coded)
r = Dense(input_size, activation='sigmoid')(hidden_2)

autoencoder = Model(inputs=x, outputs=r)
encoder = Model(inputs=x, outputs=coded)

decoder_input = Input(shape=(coded_size,))  # should do this, but don't know how to connect it below
decoder = Model(inputs=coded, output=r)

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете сделать это так:

decoder_input = Input(shape=(coded_size,))
next_input = decoder_input

# get the decoder layers and apply them consecutively
for layer in autoencoder.layers[-2:]:
    next_input = layer(next_input)

decoder = Model(inputs=decoder_input, outputs=next_input)

В качестве примечания, в вашей модели нет h.Я думаю, что это должно быть заменено на coded.

...