2016-11-06 8 views
2

У меня есть сеть в Keras с множеством выходов, однако мои данные обучения предоставляют информацию только для одного выхода за раз.Обучение только одному выходу сети в Keras

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

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

Я использую бэкэнд Theano.

+0

Это необычная установка для контролируемого обучения. Покажите некоторые примеры данных и немного объясните, почему вы получили эту настройку. – sascha

+0

Я использую его для Deep Q-Learning. Вход представляет собой состояние, и каждый результат - это оценка для действия. Вы выбираете действие, а затем обновляете сеть на основе результата этого действия. Вы хотите только обновить один вывод, так как вы не знаете результат других действий ... – simeon

+1

Я вижу. Это по-другому обрабатывается. Посмотрите на [эти источники] (https://gist.github.com/EderSantana/c7222daa328f0e885093#file-qlearn-py-L98) (я пометил строку в ссылке). Вы просто сохраняете текущие значения для других действий! – sascha

ответ

0

Для этого я закончил использование «функционального API». Вы в основном создаете несколько моделей, используя одни и те же слои ввода и скрытые слои, но разные уровни вывода.

Например:

https://keras.io/getting-started/functional-api-guide/

from keras.layers import Input, Dense 
from keras.models import Model 

# This returns a tensor 
inputs = Input(shape=(784,)) 

# a layer instance is callable on a tensor, and returns a tensor 
x = Dense(64, activation='relu')(inputs) 
x = Dense(64, activation='relu')(x) 
predictions_A = Dense(1, activation='softmax')(x) 
predictions_B = Dense(1, activation='softmax')(x) 

# This creates a model that includes 
# the Input layer and three Dense layers 
modelA = Model(inputs=inputs, outputs=predictions_A) 
modelA.compile(optimizer='rmsprop', 
       loss='categorical_crossentropy', 
       metrics=['accuracy']) 
modelB = Model(inputs=inputs, outputs=predictions_B) 
modelB.compile(optimizer='rmsprop', 
       loss='categorical_crossentropy', 
       metrics=['accuracy'])