Kombinieren von GridSearchCV mit EarlyStopping?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

Hallo, ich möchte optimale Hyperparameter (Lernrate, Anzahl an Epochen, Dropout-rate) eines Neuronales Netzes mithilfe von GridSearchCV bestimmen.

Code: Alles auswählen

def create_model (learn_rate=0.01, dropout_rate=0.5):
	model = Sequential()
	model.add(Dense(512, activation='relu))
	model.add(Dropout(dropout_rate))
	model.add(Dense(1, activation='sigmoid'))
	optimizer = Adram(lr=Learn_rate))
	model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
	return model
	
model = KerasClassifier(build_fn=create_model, epochs=100, batch_size=10, verbose=0)
learn_rate = [0.0001, 0.001, 0.01]
dropout_rate = [0.0, 0.3, 0.5, 0.7]
epochs = [20, 30, 60]
param_grid = dict(learn_rate=learn_rate, dropout=dropout_rate, epochs=epochs)
	
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
Anstatt die Anzahl der Epochen über ein Grid zu bestimmen, frage ich mich, ob nicht stattdessen
EarlyStopping eingesetzt werden könnte? Damit könnte zumindest die Zeit für die Suche verkürzt werden. Andererseits habe ich gewisse Zweifel, ob dadurch nicht der Sinn und Zweck von GridSearchCV zerstört wird?


Wie würdet Ihr die optimale Anzahl an Epochen bestimmen?
Über Meinungen und/oder Erfahrungen dazu bedanke ich mich im voraus
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Du liegst imho mit deinen Zweifeln schon ganz richtig.
Denn der Sinn von GridSearchCV ist ja nicht ein Modell optimal zu trainieren sondern die optimalen Hyperparameter zu finden.
Wenn du die dann hast, dann kannst du beim trainieren des Modells EarlyStopping verwenden.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

ok, vielen Dank. Das würde dann in etwa heißen, man könnte zwar neben den anderen Hyperparameter auch für die Epochenanzahl ein Suchraster in GridSearchCV festlegen, jedoch würde dieses Epochenanzahl-Suchraster lediglich dazu dienen optimale Werte für die restlichen Hyperparameter zu finden, während die endgültige optimale Epochenanzahl dann beim Trainieren des finalen Modells mithilfe von EarlyStopping festgestellt wird.
Antworten