2017-06-24 100 views
0

我目前正在训练CNN来分类波。虽然代码完美工作,但用于超参数调整的GridSearchCV不能按预期工作。我很困惑,因为我使用类似的代码来调整MLP中的超参数,它的功能就像一个魅力。这是完整的代码,顺便说一句,我使用TF作为后端。Keras:用于超参数调整的GridSearchCV

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_ 

奇怪的是,它是一个完美的时代,然后它引发了以下错误。

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

Can ayone help me?任何形式的帮助,非常感谢!非常感谢你们!

回答

0

通过GitHub的主分支解决

更新