Настройка гиперпараметра для выбора оптимальной нейронной сети - PullRequest
2 голосов
/ 18 марта 2020

Я хотел бы найти оптимальную нейронную сеть, основанную на некоторых критериях. Критерии следующие:

  • Тест 4 архитектуры с одним, двумя, тремя, четырьмя скрытыми слоями + выходной слой

  • Скорость обучения в быть проверенным: 0,1,0.01,0.001

  • Проверяемые эпохи: 10,50,100

  • Входные размеры = 20

Выходными данными должна быть таблица, показывающая каждую комбинацию (36 строк). Например, с одним скрытым слоем, lr = 0.1, эпох = 10, точность была X.

Пожалуйста, смотрите мой код ниже:

#Function to create the model
def create_model(layers,learn_rate):
    model = Sequential()
    for i, nodes in enumerate(layers):
        if i==0:
            model.add(Dense(nodes),input_dim = 20,activation = 'relu')
        else:
            model.add(Dense(nodes),activation = 'relu')   

    model.add(Dense(units = 4,activation = 'softmax')) 

    model.compile(optimizer=adam(lr=learn_rate), loss='categorical_crossentropy',metrics=['accuracy'])
    return model

#Initialization of variables
#Here there are the four possible types of layers with the neurons in each.
layers = [[20], [40, 20], [45, 30, 15],[32,16,8,4]]
learn_rate = [0.1,0.01,0.001]
epochs = [10,50,100]

#GridSearchCV for hyperparameter tuning
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
model = KerasClassifier(build_fn = create_model, verbose = 0)
param_grid = dict(layers = layers,learn_rate = learn_rate,epochs = epochs)
grid = GridSearchCV(estimator = model, param_grid = param_grid,cv = 3)
grid_result = grid.fit(train_x,train_y)

Но когда я запускаю код я получаю следующую ошибку:

RuntimeError: Cannot clone object <keras.wrappers.scikit_learn.KerasClassifier object at    0x000001AA272C7748>, as the constructor either does not set or modifies parameter layers

1 Ответ

1 голос
/ 19 марта 2020

Невозможно клонировать объект не является основной проблемой. Это является следствием другой ошибки в функции генератора моделей.
У вас были некоторые синтаксические ошибки в create_model () . Пожалуйста, посмотрите на ошибки, которые были до "проблемы клонирования" в вашем выводе.
Вот исправленная функция:

from keras import optimizers

def create_model(layers, learn_rate):
    model = Sequential()
    for i, nodes in enumerate(layers):
        if i==0:
            model.add(Dense(nodes,input_dim = 20,activation = 'relu'))
        else:
            model.add(Dense(nodes,activation = 'relu'))
    model.add(Dense(units = 4,activation = 'softmax')) 

    model.compile(optimizer=optimizers.adam(lr=learn_rate), loss='categorical_crossentropy',metrics=['accuracy']) 
    return model
...