Условный вариационный автоэнкодер для генерации рецептов коктейлей - PullRequest
0 голосов
/ 08 мая 2018

Я хочу использовать условный вариационный автоэнкодер для создания рецептов коктейлей. Я изменил код из этого репо , чтобы он мог читать мои собственные данные. Входные данные представляют собой массив всех возможных ингредиентов, поэтому большинство записей имеют значение 0. Если ингредиент присутствует, он получает значение, равное 250 мл. Последний индекс - это то, что «осталось», чтобы убедиться, что коктейль всегда добавляет оп к 1.

Пример:

0,0.0,0.0,0.24,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6,0.0,0.0,0.0,0.0,0.0,0.06,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.088,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0120000000000000

Выход с функцией активации softmax выглядит примерно так:

[5.8228267e-10 6.7397465e-10 1.9761790e-08 2.3713847e-01 3.1315527e-11
 4.9592632e-11 4.2637563e-05 7.6098106e-10 2.9357905e-05 1.3291576e-08
 2.6885323e-09 4.2986945e-10 3.0274603e-09 8.6994453e-11 3.2391853e-10
 3.3694150e-10 4.9642315e-11 2.2861177e-10 2.5966980e-11 3.3872125e-10
 4.8175470e-12 1.1207919e-09 7.8108942e-10 1.0438563e-09 4.7190268e-12
 2.2692757e-09 3.3177341e-10 4.7493649e-09 1.6603904e-08 2.7854623e-11
 1.1586791e-07 2.3917833e-08 1.0172608e-09 2.2049740e-06 4.0200213e-10
 4.8334226e-05 1.9393491e-09 4.0731374e-10 4.5671125e-10 8.5878060e-10
 1.3625046e-10 1.7755342e-09 2.4927729e-09 3.8919952e-09 1.6791472e-10
 1.5160178e-09 9.0631114e-10 1.2043951e-08 2.1420650e-01 1.4531254e-10
 3.9913628e-10 4.6368896e-06 6.8399265e-11 2.4654754e-09 6.5392605e-12
 5.8443012e-10 2.7861690e-11 4.7215394e-08 5.1503157e-09 5.4484850e-10
 1.9266211e-10 7.2835156e-09 6.4243433e-10 4.2432866e-09 4.2630177e-08
 1.1281617e-12 1.8015703e-08 3.5657147e-10 3.4241193e-11 4.8394988e-10
 9.6064046e-11 2.9857121e-02 3.8048144e-11 1.1893182e-10 5.1867032e-01]

Как я могу убедиться, что значения распределены только между парой ингредиентов, а остальные ингредиенты получают 0, аналогично вводу? Это вопрос изменения функций активации?

Спасибо:)

1 Ответ

0 голосов
/ 14 мая 2018

Я не уверен, что вы хотите использовать вероятности здесь. Кажется, вы делаете регресс к некоторым конкретным значениям. Следовательно, имеет смысл не использовать softmax и использовать простую среднеквадратичную ошибку.

Обратите внимание, что если определенные значения всегда смещены в вашей потере, вы можете просто использовать дополнительный вес для вашей потери или использовать некоторую абстракцию (например, class_weight) у Кераса.

Для этой задачи вы могли бы рассмотреть возможность использования Keras, особенно для этой задачи это имело бы смысл. В мастер проверяется пример: https://github.com/keras-team/keras/blob/master/examples/variational_autoencoder.py

Для этой задачи может иметь смысл использовать GAN: https://github.com/keras-team/keras/blob/master/examples/mnist_acgan.py. Вы позволите ему различать случайный коктейль и «настоящий» коктейль. Он научится различать эти два, и в процессе, он будет тренировать веса, чтобы иметь возможность создать генератор, который будет генерировать коктейли для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...