Точность на среднем уровне реализации автоэнкодера с использованием Keras

Я реализовал автоэнкодер с помощью Keras. Я понимаю, что могу добавить метрику точности следующим образом:

autoencoder.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])

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


person iBM    schedule 07.11.2018    source источник
comment
По умолчанию точность будет на последнем слое (keras не может знать, что вам нужен определенный слой, даже автоэнкодер может не иметь среднего слоя). Если вам нужна другая метрика для среднего уровня, вам нужно указать это явно.   -  person Matthieu Brucher    schedule 07.11.2018
comment
Вот именно мой вопрос... как его указать явно?   -  person iBM    schedule 07.11.2018
comment
Вопрос в том, какую метрику вы хотите для встроенного пространства? Во встроенном пространстве нет правды. Метрики работают как потери, но для встроенного пространства нет функции потерь, так как вы хотите найти хорошую.   -  person Matthieu Brucher    schedule 07.11.2018
comment
Метрика должна быть точностью. Я думаю, что мне нужно реализовать пользовательскую метрику, которая получает истинные метки в качестве входных данных и обучает простой классификатор внутри пользовательской метрики для получения прогнозируемых результатов. Я просто не знаю, как сказать Керасу запускать метрику на среднем уровне, а не на последнем. Вы знаете лучший способ?   -  person iBM    schedule 07.11.2018
comment
Насколько я понимаю, метрика точности по умолчанию в автоэнкодере бессмысленна, верно?   -  person iBM    schedule 07.11.2018
comment
Итак, у вас есть еще один классификатор, еще один слой, который вы теперь можете обучить.   -  person Matthieu Brucher    schedule 07.11.2018
comment
Вы можете отредактировать вопрос, добавив аспект классификации.   -  person Matthieu Brucher    schedule 07.11.2018
comment
Вы имеете в виду, что я должен реализовать другую сеть классификатора, содержащую кодировщик, замороженный для обучения?   -  person iBM    schedule 07.11.2018
comment
Это выбор, его не надо замораживать, можно, наверное, сначала обучить только автоэнкодер, а потом обновлять его, обучая классификатор.   -  person Matthieu Brucher    schedule 07.11.2018


Ответы (1)


Кажется, что вам действительно нужна сеть с несколькими выходами.

Итак, поверх вашего среднего слоя, который определяет ваше встраивание, добавьте слой (или больше) для вашей классификации.

Затем взгляните на Несколько выходов в Keras, чтобы создать глобальную стоимость.

Вы также можете начать с обучения только автоэндодера, затем дополнительных слоев классификатора только для просмотра производительности, вы также можете сбалансировать точность кодировщика и точность классификатора как потерю, обучая «обе» сети одновременно время.

person Matthieu Brucher    schedule 07.11.2018
comment
Я не хочу, чтобы сеть классификатора влияла на мой кодировщик. Я хочу использовать чистую ошибку реконструкции в качестве функции потерь и просто контролировать точность классификации среднего слоя. - person iBM; 07.11.2018
comment
Для классификации все же нужен дополнительный слой и его обучение. - person Matthieu Brucher; 07.11.2018
comment
Я знаю. Я имею в виду замораживание части кодировщика и обучение остальной части классификатора. - person iBM; 07.11.2018
comment
Я запутался, иногда вы хотите использовать метрику во время обучения автоэнкодера, а иногда и после обучения классификации:/Вам, вероятно, нужно тренировать оба одновременно, если вы хотите иметь точность классификации во время обучения автоэнкодера. - person Matthieu Brucher; 07.11.2018
comment
То, что вы сказали, если я правильно понял, это сеть с одним входом и двумя выходами, где вход подключен к кодировщику, первый выход подключен к декодеру, а второй выход подключен к классификатору. Я хочу сказать, что я не хочу, чтобы ошибка классификатора распространялась обратно на кодировщик. Другими словами, я хочу, чтобы энкодер узнавался только по ошибке декодера (ошибка реконструкции). Я хочу, чтобы классификатор просто предоставлял метрику, а не для обучения кодировщика (он будет обучать только классификатор, а не кодировщик). - person iBM; 07.11.2018
comment
В каждую эпоху обучения автоэнкодера (кодировщика и декодера) я хочу, чтобы классификатор полностью обучался, чтобы получить точность в качестве метрики. - person iBM; 07.11.2018
comment
Вероятно, вам нужно точно настроить модель, я недостаточно знаю о keras, чтобы знать, как вы можете обучить автоэнкодер, обучить классификатор с замороженным автоэнкодером, а затем вычислить метрики. Легко сделать с tensorflow, но это более низкий уровень, чем keras. - person Matthieu Brucher; 07.11.2018