Обучение нескольких моделей в серии Keras для оптимизации гиперпараметров - PullRequest
1 голос
/ 01 октября 2019

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

Мой текущий код (упрощенный):

scores= []

for i in range(n):
    model = Sequential()
    model.add(...)
    model.compile(...)
    model.fit(...)
    scores.append([i, model.score(...)])

for score in scores:
    print(score)

Он работает так, как ожидается:

[0, 0.89712456798]
[1, 0.76652347349]
[2, 0.83178943210]
...

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

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Ваш код в порядке. Каждый раз он создает новую модель.

Но я бы предложил обучить несколько моделей параллельно. Я только что обнаружил RayLib, который хорошо подходит для этой задачи.

https://ray.readthedocs.io/en/latest/auto_examples/plot_hyperparameter.html

Ваш код с 4 параллельными тренировочными сессиями по 5 итераций каждая:

import ray

@ray.remote
def train(sequence):
    scores= []
    for i in range(sequence)
        model = Sequential()
        model.add(...)
        model.compile(...)
        model.fit(...)
        scores.append([i, model.score(...)])
    return scores

n=4
results = []
for i in range(n):
    results.append(train.remote(5))

results_data = ray.get(results)

for i in results_data:
    print(i)

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

0 голосов
/ 01 октября 2019

Каждый раз, когда вы вызываете

model = Sequential()

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

...