Нужно ли определять количество единиц в слое в условной области при использовании keras Tuner для настройки модели?

Согласно примерам Keras Tuner здесь и здесь, если вы хотите определить количество слоев и единиц каждого слоя в модели глубокого обучения с использованием гиперпараметров, которые вы делаете примерно так:

for i in range(hp.Int('num_layers', 1, 10)):
    model.add(layers.Dense(units=hp.Int('unit_' + str(i), 32, 512, 32)))

Однако, как уже отмечали другие, здесь и здесь после того, как оракул увидит модель с num_layers = 10 он всегда будет присваивать значение от unit_0 до unit_9, даже если num_layers меньше 10.

Например, в случае num_layers = 1 для построения модели будет использоваться только unit_0. Но с unit_1 по unit_9 будут определены и активны в гиперпараметрах.

Знает ли оракул, что с unit_1 по unit_9 на самом деле не использовались для построения модели (и, следовательно, игнорирует их значимость для влияния на результаты этого испытания)?

Или предполагается, что с unit_1 по unit_9 используются, потому что они были определены (и вызов hp.get('unit_9'), например, вернет значение)?

В последнем случае оракул использует дезинформацию для управления процессом настройки. В результате для сходимости потребуется больше времени (в лучшем случае) и неправильная сходимость к решению в результате присвоения релевантности неиспользуемым гиперпараметрам (в худшем случае).

Должна ли модель быть определена с использованием условных областей , как это?

num_layers = hp.Int('num_layers', 1, 10)
for i in range(num_layers):
    with hp.conditional_scope('num_layers', list(range(i + 1, 10 + 1))):
        model.add(layers.Dense(units=hp.Int('unit_' + str(i), 32, 512, 32)))

При таком определении модели, если num_layers < 10, вызов hp.get('unit_9') вернет ValueError: Conditional parameter unit_10 is not currently active, как и ожидалось.


person Joe    schedule 26.07.2020    source источник


Ответы (1)


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

Однако при использовании RandomSearch более простым способом (который допускает наличие неактивных параметров) результат должен быть точно таким же. При запуске новой пробной версии тюнер просматривает все возможности, но отбрасывает недействительные до фактического запуска пробной версии.

Для существующих тюнеров, я думаю, это сильно влияет только на байесовский. Я не уверен на 100% в случае Hyperband; но для RandomSearch оба подхода совершенно одинаковы (за исключением отображения неактивных параметров, которые сбивают людей с толку).

person yixing    schedule 27.07.2020