我想根据一些标准找出最优的神经网络。这些标准如下:
-
测试四种架构,分别为一层、两层、三层、四层隐藏层 + 输出层
-
要测试的学习率:0.1, 0.01, 0.001
-
要测试的周期数:10, 50, 100
-
输入维度 = 20
输出应该是一张表,显示每种组合(共36行)。例如,对于一层隐藏层,学习率 = 0.1,周期数 = 10,准确率为X。
请查看我下面的代码:
#Function to create the modeldef 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 tuningfrom keras.wrappers.scikit_learn import KerasClassifierfrom sklearn.model_selection import GridSearchCVmodel = 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
回答:
无法克隆对象并不是主要问题。这是模型生成函数中另一个错误的结果。
你在create_model()中有一些语法错误。请查看输出中“克隆问题”之前的错误。
这是修正后的函数:
from keras import optimizersdef 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