2017-01-18 7 views
1

私はアンサンブル学習をしようとしています。これは、基底推定子として2D畳み込みニューラルネットワーク(CNN)を用いたScikit-Learn BaggingClassifierを使用して袋詰しています。keras-scikitラッパーを介して基底推定値として畳み込みニューラルネットワークを使用して、scikit BaggingClassifierを使用して袋詰めを行う方法?

これまでは、私はscikitのBaggingClassifierをテストするためにscikitの神経回路網でバギングを試みました。また、keras-wrapperを使って2次元CNNのハイパーパラメータを検索するscikitのGridSearchCVをテストしました。

keras-wrapperでscikitのBaggingClassifierを使用してラップアラウンドし、2次元CNNモデルを基本推定としてアンサンブル学習を作成したところ、エラーが発生しました。ここで

は、コードスニペットです:ここで

def baggingCNN(self): 
    from sklearn.ensemble import BaggingClassifier 
    from keras.wrappers.scikit_learn import KerasClassifier 
    from keras.utils.np_utils import to_categorical 

    patternTraining = np.reshape(self.patternTraining, 
           (self.patternTraining.shape[0], 1, 1, self.patternTraining.shape[1])) 
    patternTesting = np.reshape(self.patternTesting, 
           (self.patternTesting.shape[0], 1, 1, self.patternTesting.shape[1])) 
    X = patternTraining 
    Y_binary = to_categorical(self.targetTraining) 
    cnnA=KerasClassifier(self.create_cnn_model_A(patternTraining.shape[1],patternTraining.shape[2],patternTraining.shape[3]),nb_epoch=500, batch_size=64, verbose=1) 
    bagging=BaggingClassifier(base_estimator=cnnA, n_estimators=3, verbose=1, n_jobs=3, max_samples=1) 
    bagging.fit(X, Y_binary) 

はcreate_cnn_model_A機能は次のようになります:ここで

def create_cnn_model_A(self, sizeDepth, sizeRow, sizeCol): 
    from keras.models import Sequential 
    import keras.layers.core as core 
    import keras.layers.convolutional as conv 
    from keras.regularizers import l2, activity_l2, l1, activity_l1, l1l2, activity_l1l2 

    numFilter = 32 
    nStride = 1 

    model = Sequential() 
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu', 
           input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same')) 
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=3, activation='relu', 
           input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same')) 
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=4, activation='relu', 
           input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same')) 
    model.add(conv.MaxPooling2D(pool_size=(1, 2), strides=(nStride, nStride), dim_ordering="th")) 
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu', 
           input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same')) 
    model.add(conv.Convolution2D(nb_filter=numFilter, nb_row=1, nb_col=2, activation='relu', 
           input_shape=(sizeDepth, sizeRow, sizeCol), border_mode='same')) 
    model.add(conv.MaxPooling2D(pool_size=(1, 2), strides=(nStride, nStride), dim_ordering="th")) 
    model.add(core.Flatten()) 
    model.add(core.Dense(output_dim=50, activation='relu', W_regularizer=l2(0.01))) 
    model.add(core.Dense(output_dim=18, activation='softmax')) 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy', 'precision', 'recall']) 
    return model 

は整形前self.patternTraining & self.targetTrainingの形状である:

(1361, 45) (1361,) 

これは私が持っているエラーです:

Traceback (most recent call last): 
    File "/home/berylramadhian/PycharmProjects/Relation Extraction/TestModule2.py", line 153, in <module> 
    clsf.baggingCNN() 
    File "/home/berylramadhian/PycharmProjects/Relation Extraction/MachineLearning.py", line 511, in baggingCNN 
    bagging.fit(X, Y_binary) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/bagging.py", line 248, in fit 
    return self._fit(X, y, self.max_samples, sample_weight=sample_weight) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/ensemble/bagging.py", line 284, in _fit 
    X, y = check_X_y(X, y, ['csr', 'csc']) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 521, in check_X_y 
    ensure_min_features, warn_on_dtype, estimator) 
    File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 405, in check_array 
    % (array.ndim, estimator_name)) 
ValueError: Found array with dim 4. Estimator expected <= 2. 

私は、これは、アレイ形状誤差のいくつかの種類であると思ったが、私はこれを解決する方法がわかりません。あるいは、kerasの2D CNNとkeras-wrapperを使ってscikitのBaggingClassifierを使用することはまだできませんか?

さらに詳しい情報が必要な場合は、私は提供する準備が整いました。 ご協力いただきありがとうございます。

答えて

1

現在、Kerasを使用しているSklearnではサポートされていません。あなたは自分で実装する必要がありますか、または数ヶ月前にコミュニティで同じ問題を提起しました。私は適切な応答を得て、現在、彼らはそれを実装しようとしています。次のバージョンを待つか、問題を確認して詳細を確認してください。

+1

ありがとうございます。はい、実際に私は手で袋を実装しています。なぜなら、sklearnは、4次元形状の入力をバギングのフィット関数に渡そうとするとエラーを発生させ続けるからです。彼らがそれを実装しようとするならば良いニュースです。 –

+0

@BerylRamadhianAribowoちょっと同じ問題があります。実装されたバギングを私に渡してください。私はあなたのギターを見ましたが、見つけられませんでした。どうもありがとう! – jumboRumbo

関連する問題