Tensorflow — Вывод скрытого слоя автоэнкодера

#python #tensorflow #keras #autoencoder

Вопрос:

У меня есть сложенный автоэнкодер, который имеет такую структуру 500-250-100-50-100-250-500 . Теперь я хочу удалить 50-мерный скрытый слой и использовать его для классификации моих входных данных в 2 класса с использованием слоя softmax.

Это означает, что мне нужен мой автоэнкодер, чтобы сжать мои 500-мерные входные векторы из моего обучающего набора данных в 50-мерные векторы и использовать их для обучения слоя softmax. В дополнение к этому мне также нужен 50-мерный скрытый слой.

Как бы я получил скрытый слой: autoencoder.layers[3]

Но как мне получить сжатые 50-мерные векторы из 500-мерных входных векторов? Мне нужно было бы получить вывод этого скрытого слоя при использовании autoencoder.predict(x_train) .

Ответ №1:

Если вы хотите получить другой вывод из скрытого слоя, вы можете получить вывод и добавить его в новую модель, как это:

 new_model = tf.keras.Model(inputs=autoencoder.input, outputs=[autoencoder.layers[3].output, autoencoder.output])
 

Тогда вы можете получить такие прогнозы:

 hidden_layer_pred, last_layer_pred = new_model.predict(x_train)
 

Комментарии:

1. Зачем мне это нужно autoencoder.output tf.keras.Model ? Этого autoencoder.layers[3].output будет недостаточно?

2. Если вы хотите, чтобы они оба были в одной модели, вы можете сделать вот так. Но если вам достаточно просто скрытого слоя, то да, вы можете.