简体   繁体   English

Keras:GridSearchCV用于超参数调整

[英]Keras : GridSearchCV for Hyperparameter Tuning

I'm currently training a CNN for classifying waves. 我正在训练CNN对波浪进行分类。 While the code works perfectly, the GridSearchCV for hyperparameter tuning does not work as intended. 虽然代码完美无缺,但用于超参数调优的GridSearchCV无法按预期工作。 I was confused because I used similar code for tuning hyperparameters in MLP and it works like a charm. 我很困惑,因为我使用类似的代码来调整MLP中的超参数,它就像一个魅力。 This is the full code, and by the way, I'm using TF as backend. 这是完整的代码,顺便说一句,我使用TF作为后端。

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_

The strange thing is, it was running perfectly for an epoch then it raises the following error. 奇怪的是,它完美地运行了一个时代,然后它引发了以下错误。

File "C:\\Program Files\\Anaconda3\\lib\\site-> >packages\\keras\\wrappers\\scikit_learn.py", line 220, in predict return self.classes_[classes] 文件“C:\\ Program Files \\ Anaconda3 \\ lib \\ site- >> packages >> keras \\ wrappers \\ scikit_learn.py”,第220行,预测返回self.classes_ [classes]

IndexError: index 1 is out of bounds for axis 0 with size 1 IndexError:索引1超出轴0的大小为1的范围

Can ayone help me? 你能帮助我吗? Any kind of help is greatly appreciated! 非常感谢任何形式的帮助! Thanks a lot guys! 非常感谢!

SOLVED 解决了

Update via github master branch 通过github master分支更新

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM