Свести и задний керас - PullRequest
       6

Свести и задний керас

0 голосов
/ 01 марта 2019

Я пытаюсь получить значения в простом векторе, используя автоэнкодер

, вот мой код

input_img = Input(shape=(28, 28, 1))

x = Conv2D(32, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)

Здесь мне нужен сплющенный слой

encoder = Model(input_img, encoded)

Изатем сделать его сверточным обратно

encoderOutputShape = encoded._keras_shape[1:]

# unflatten here
decoder_input= Input(encoderOutputShape)
decoder = Conv2D(32, (3, 3), activation='relu', padding='same')(decoder_input)
x = UpSampling2D((2, 2))(decoder)
x = Conv2D(32, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

decoder = Model(decoder_input, decoded)

auto_input = Input(shape=(28,28,1))

encoded = encoder(auto_input)
decoded = decoder(encoded)

auto_encoder = Model(auto_input, decoded)

Как это сделать правильно?

Другими словами, я хочу получить выходные данные кодера (или использовать случайные данные), изменитьэто и положить в декодер и получить декодированный результат.

1 Ответ

0 голосов
/ 01 марта 2019

Здесь возникает вопрос, почему вы выравниваете тензор, если вы не используете слои Dense?

, но вы можете сделать так:

encoderOutputShape = Flatten()(encoded)
decoder_input= Input(Reshape((7,7,32))(encoderOutputShape)
decoder = Conv2D(32, (3, 3), activation='relu', padding='same')(decoder_input)

, потому что вам нужно изменить форму тензора раньше.

...