【问题标题】:How do I create the decoder part of the Autoencoder?如何创建自动编码器的解码器部分?
【发布时间】:2019-08-24 23:18:01
【问题描述】:

我正在尝试从编码器复制图层以创建解码器,但出现“索引错误”。

input_img =Input(25425,)

encoded1 = Dense(75,activation=tf.nn.relu)(input_img)

encoded = Dense(50,activation=tf.nn.relu)(encoded1)

decoded = Dense(25425, activation='sigmoid')(encoded)

autoencoder = Model(input_img, encoded1, decoded)

encoder = Model(input_img, encoded)

encoded_input = Input(shape=(50,))


decoder_layer1 = autoencoder.layers[1](encoded_input)

decoder_layer2 = autoencoder.layers[0](decoder_layer1)

decoder = Model(encoded_input, decoder_layer1, decoder_layer2)

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

autoencoder.fit(X, X,
            epochs=50,
            shuffle=True)

我希望解码器具有与刚刚反转的编码器相同的层,但我无法复制这些层。我收到此错误:

Traceback (most recent call last):
File "C:\Users\dalto\Documents\geo4\train.py", line 36, in <module>
decoder_layer1 = autoencoder.layers[1](encoded_input)
IndexError: list index out of range

【问题讨论】:

    标签: python tensorflow keras autoencoder


    【解决方案1】:

    您的代码中有几个错误。在工作的 sn-p 中查看我的 cmets:

    # Random input for testing purposes
    X = np.random.rand(10, 25425)
    
    input_img =tf.keras.layers.Input(25425,)
    encoded1 = tf.keras.layers.Dense(75,activation=tf.nn.relu)(input_img)
    encoded2 = tf.keras.layers.Dense(50,activation=tf.nn.relu)(encoded1)
    decoded = tf.keras.layers.Dense(25425, activation='sigmoid')(encoded2)
    # The input of the autoencoder is the image (input_img), and the output is the decoder layer (decoded)
    autoencoder = tf.keras.Model(input_img, decoded)
    
    encoder = tf.keras.Model(input_img, encoded2)
    
    encoded_input = tf.keras.layers.Input(shape=(50,))
    # The decoded only consists of the last layer
    decoder_layer = autoencoder.layers[-1](encoded_input)
    # The input to the decoder is the vector of the encoder which will be fed (using encoded_input), the output is the last layer of the network (decoder_layer)
    decoder = tf.keras.Model(encoded_input, decoder_layer)
    
    autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
    autoencoder.fit(X, X, epochs=50, shuffle=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多