代码之家  ›  专栏  ›  技术社区  ›  zipline86

重用中间层作为Keras中另一个模型的输入

  •  1
  • zipline86  · 技术社区  · 7 年前

    我知道首先我应该为解码后的模型做一个输入层来形成这个形状,但是我不知道如何得到我的编码层数据作为解码模型的输入,并让它从编码向量映射到最后一层。

    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()
    
    # 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 回复  |  直到 5 年前
        1
  •  1
  •   today    7 年前

    你可以这样做:

    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