如何从 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_batchModel.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)