如何从 keras.tf 中的特定层获取输出,自动编码器中的瓶颈层?
How to get output from a specific layer in keras.tf, the bottleneck layer in autoencoder?
我正在开发一个自动编码器来聚类某些图像组。
input_images->...->bottleneck->...->output_images
我已将自动编码器校准到令我满意的程度并保存了模型;一切都是在 python3 上使用 keras.tensorflow 开发的。
下一步是将自动编码器应用于大量图像,并根据瓶颈层中的余弦距离对它们进行聚类。糟糕,我刚刚意识到我不知道 keras.tf 中用于 运行 将模型批处理到特定层而不是输出层的语法。因此问题:
我如何 运行 像 Model.predict_on_batch
或 Model.predict_generator
到特定的 "bottleneck" 层并检索该层上的值而不是输出上的值层?
您需要定义一个新模型(如果您最初没有将编码器和解码器定义为单独的模型,这通常是最简单的选择)。
如果您的模型是在没有重用层的情况下定义的,它只是:
inputs = model.input
outputs= model.get_layer('bottleneck').output
encoder = Model(inputs, outputs)
使用 encoder
模型作为任何其他模型。
完整的代码是这样的,
# ENCODER
encoding_dim = 37310
input_layer = Input(shape=(encoding_dim,))
encoder = Dense(500, activation='tanh')(input_layer)
encoder = Dense(100, activation='tanh')(encoder)
encoder = Dense(50, activation='tanh', name='bottleneck_layer')(encoder)
decoder = Dense(100, activation='tanh')(encoder)
decoder = Dense(500, activation='tanh')(decoder)
decoder = Dense(37310, activation='sigmoid')(decoder)
# full model
model_full = models.Model(input_layer, decoder)
model_full.compile(optimizer='adam', loss='mse')
model_full.fit(x, y, epochs=20, batch_size=16)
# bottleneck model
bottleneck_output = model_full.get_layer('bottleneck_layer').output
model_bottleneck = models.Model(inputs = model_full.input, outputs = bottleneck_output)
bottleneck_predictions = model_bottleneck.predict(X_test)
我正在开发一个自动编码器来聚类某些图像组。
input_images->...->bottleneck->...->output_images
我已将自动编码器校准到令我满意的程度并保存了模型;一切都是在 python3 上使用 keras.tensorflow 开发的。
下一步是将自动编码器应用于大量图像,并根据瓶颈层中的余弦距离对它们进行聚类。糟糕,我刚刚意识到我不知道 keras.tf 中用于 运行 将模型批处理到特定层而不是输出层的语法。因此问题:
我如何 运行 像 Model.predict_on_batch
或 Model.predict_generator
到特定的 "bottleneck" 层并检索该层上的值而不是输出上的值层?
您需要定义一个新模型(如果您最初没有将编码器和解码器定义为单独的模型,这通常是最简单的选择)。
如果您的模型是在没有重用层的情况下定义的,它只是:
inputs = model.input
outputs= model.get_layer('bottleneck').output
encoder = Model(inputs, outputs)
使用 encoder
模型作为任何其他模型。
完整的代码是这样的,
# ENCODER
encoding_dim = 37310
input_layer = Input(shape=(encoding_dim,))
encoder = Dense(500, activation='tanh')(input_layer)
encoder = Dense(100, activation='tanh')(encoder)
encoder = Dense(50, activation='tanh', name='bottleneck_layer')(encoder)
decoder = Dense(100, activation='tanh')(encoder)
decoder = Dense(500, activation='tanh')(decoder)
decoder = Dense(37310, activation='sigmoid')(decoder)
# full model
model_full = models.Model(input_layer, decoder)
model_full.compile(optimizer='adam', loss='mse')
model_full.fit(x, y, epochs=20, batch_size=16)
# bottleneck model
bottleneck_output = model_full.get_layer('bottleneck_layer').output
model_bottleneck = models.Model(inputs = model_full.input, outputs = bottleneck_output)
bottleneck_predictions = model_bottleneck.predict(X_test)