2017-06-24 4 views
0

Ich trainiere gerade ein CNN für die Klassifizierung von Wellen. Während der Code einwandfrei funktioniert, funktioniert die GridSearchCV für das Hyperparameter-Tuning nicht wie vorgesehen. Ich war verwirrt, weil ich ähnlichen Code für das Tuning von Hyperparametern in MLP verwendete, und es funktioniert wie ein Zauber. Dies ist der vollständige Code, und übrigens verwende ich TF als Backend.Keras: GridSearchCV für Hyperparameter Tuning

import pandas as pd 
import numpy as np 

#Import training set 
training_set = pd.read_csv("training_set.csv", delimiter=";") 
X_train = training_set.iloc[:,1:].values 
y_train = training_set.iloc[:,0:1].values 

#Import test set 
test_set = pd.read_csv("test_set_v2.csv", delimiter=";") 
X_test = test_set.iloc[:,1:].values 
y_test = test_set.iloc[:,0:1].values 

from sklearn.preprocessing import StandardScaler 
ss = StandardScaler() 
X_train = ss.fit_transform(X_train) 
X_test = ss.fit_transform(X_test) 

#Convert X into 3D tensor 
X_train = np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1)) 
X_test = np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1)) 

#Importing the CNN libraries 
from keras.models import Sequential 
from keras.layers import Conv1D,MaxPooling1D,Flatten 
from keras.layers import Dropout,Dense 
from keras.layers.normalization import BatchNormalization 

#Parameter tuning 
from keras.wrappers.scikit_learn import KerasClassifier 
from sklearn.model_selection import GridSearchCV 
def build_classifier(optimizer, dropout1, dropout2): 
    classifier = Sequential() 
    classifier.add(Conv1D(filters=4,kernel_size=4,activation='relu',input_shape=(X_train.shape[1],1))) 
    classifier.add(MaxPooling1D(strides=4)) 
    classifier.add(BatchNormalization())  
    classifier.add(Flatten()) 
    classifier.add(Dropout(0.25)) 
    classifier.add(Dense(8, activation='relu')) 
    classifier.add(Dropout(0.25)) 
    classifier.add(Dense(1,activation='sigmoid')) 
    classifier.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy']) 
    return classifier 

classifier = KerasClassifier(build_fn=build_classifier) 

parameters = {'batch_size': [25,32], 
       'epochs': [5,10], 
       'optimizer': ['adam', 'rmsprop'], 
       'dropout1' : [0.2,0.25,3], 
       'dropout2' : [0.2,0.25,3], 
       } 
grid_search = GridSearchCV(estimator=classifier, 
          param_grid = parameters, 
          scoring = 'accuracy', 
          cv = 10) 
grid_search = grid_search.fit(X_train, y_train) 
best_parameters = grid_search.best_params_ 
best_accuracy = grid_search.best_score_ 

Die seltsame Sache ist, es lief perfekt für eine Epoche, dann wirft es den folgenden Fehler auf.

File "C:\Program Files\Anaconda3\lib\site-> >packages\keras\wrappers\scikit_learn.py", line 220, in predict return self.classes_[classes]

IndexError: index 1 is out of bounds for axis 0 with size 1

Kann mir jemand helfen? Jede Art von Hilfe wird sehr geschätzt! Vielen Dank, Jungs!

Antwort

0

GELÖST

Update via GitHub Master Zweig

Verwandte Themen