我正在對神經網絡進行超參數調整。我嘗試了很多手動調整,但對我一直使用的數據集的預測能力仍然很差。我一直選擇使用 GridSearch 來測試我的模型的所有可能的參數組合。類似的事情是否可能(參見下面的代碼)或者是否有更智能/更好的參數調整方法?代碼能夠運行;當然這需要一些時間,但確實有效。我沒有特別的錯誤,我只是在尋找一些好的見解來知道這是否合適。數據框示例:sequence target expression-AQSVPWGISRVQAPAAH-NRGLRGSGVKVAVLDTGI-STHPDLNI... 0.00 50.0-AQQVPYGVSQIKAPALH-EQGYTGQNVKVAVIDTGIDSSHPDLKV... 0.46 42.0-AQSVPWGIRRVQAPAAH-NRGLTGSGVKVAVLDTGI-STHPDLNI... 0.34 46.0-AQTVPWGISRVQAPAAH-NRGLTGAGVKVSVLDTGI-STHPDLNI... 0.95 45.0-AQSVPYGVSQIKAPALH-SQGYTGSNVKVAVIDTGIDSSHPDLKV... 0.60 50.0數據形狀:3000行和3840個特征請注意,特征數很高,因為所有這些序列都是一次熱編碼的。代碼:'Hyperparameter Tuning for Neurons, Batch_Size, Epochs and Learning Rate'def build_regressor(n_neurons=1, learning_rate=0.01): regressor = Sequential() regressor.add(Dense(n_neurons, activation = 'relu', input_shape = (x_train.shape[1],))) #regressor.add(Dense(n_neurons, activation = 'relu')) regressor.add(Dense(units=1)) optimizer = Adam(lr = learning_rate) regressor.compile(optimizer= optimizer, loss='mean_squared_error', metrics=['mae','mse']) return regressor#Create Modelmodel = KerasRegressor(build_fn=build_regressor, verbose=0)# define the grid search parametersbatch_size = [10, 25, 50, 100, 150]epochs = [5, 10, 25, 50]n_neurons = [1, 32, 64, 128, 256, 512]learning_rate = [0.001, 0.01, 0.1, 0.2, 0.3]param_grid = dict(batch_size=batch_size, epochs=epochs, n_neurons=n_neurons, learning_rate = learning_rate)#implement grid_searchgrid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3, scoring = 'r2')grid_result = grid.fit(x_train, y_train)# summarize resultsprint("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))means = grid_result.cv_results_['mean_test_score']stds = grid_result.cv_results_['std_test_score']params = grid_result.cv_results_['params']for mean, stdev, param in zip(means, stds, params): print("%f (%f) with: %r" % (mean, stdev, param))
2 回答

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
網格搜索 CV 總是給出最優解決方案,但執行時間較長。但是還有一些其他超參數技術,例如 RandomizedSearchCV,它僅在選定的點上迭代,您甚至可以在其中調整迭代,但它并不總是給出最佳解決方案,但它可以節省時間。但你還有其他一些技巧,比如
超視
踢
TPOT
它的性能比 RandomizedSearchCV 好得多,并且完全有機會給出最佳解決方案。
對于較小的數據集,您可以使用 GridSearchCV,但對于較大的數據集,始終使用 hyperopt 或 TPOT,這比 RandomizedSearchCV 好得多。

當年話下
TA貢獻1890條經驗 獲得超9個贊
老實說,網格搜索看起來不錯。正如您提到的,沒有錯誤,從我的角度來看,我認為如果您的數據集大小隨著時間的推移而增加并且您無法進行網格搜索,請嘗試查看 RandomizedSearchCV (它隨機選擇超參數的子集并對其進行處理,這與網格搜索不同檢查所有組合)。對于大數據集,GridSearch 在生產環境中有時變得不可行。
添加回答
舉報
0/150
提交
取消