모델 콜백도 사용하려는 경우 Keras와 교차 유효성 검사를 수행 할 수는 없지만 결국 this post은 가능한 것으로 나타났습니다. 그러나, 나는 내 상황에 이것을 통합하는 데 어려움을 겪고있다.교차 유효성 검사를 실행할 때 Keras 콜백
더 자세히 살펴 보려면 machinelearningmastery blog을 따르고 the iris dataset을 사용하고 있습니다.
이것은 3 클래스 분류 문제이며, 이제는 멀티 레이어 퍼셉트론 (테스트를 위해 하나의 레이어)을 사용하려고합니다. 내 목표는 모델 콜백에서 작업하는 것이므로 최상의 모델의 가중치를 저장할 수 있습니다. 아래, 나는 나의 섹션 network_mlp
에서 그것을 시도한다. 모델이 콜백없이 작동한다는 것을 보여주기 위해 network_mlp_no_callbacks
도 포함됩니다.
파이썬 세션에 복사/붙여 넣기를해서 문제없이 실행할 수 있어야합니다. 내가보고있는 오류를 복제하려면 마지막 줄의 주석 처리를 제거하십시오.
오류 : RuntimeError: Cannot clone object <keras.wrappers.scikit_learn.KerasClassifier object at 0x7f7e1c9d2290>, as the constructor does not seem to set parameter callbacks
코드 : 첫 번째 섹션은 데이터를 읽 두 번째는 작동하지 않는 콜백 모델입니다. 세 번째는 콜백이없는 모델로, (문맥을 제공하기 위해) 작동합니다.
#!/usr/bin/env python
import numpy as np
import pandas, math, sys, keras
from keras.models import Sequential
from keras.callbacks import EarlyStopping, ModelCheckpoint
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from keras.utils import np_utils
from keras.utils.np_utils import to_categorical
from sklearn.preprocessing import LabelEncoder
def read_data_mlp(train_file):
train_data = pandas.read_csv("iris.csv", header=None)
train_data = train_data.values
X = train_data[:,0:4].astype(float)
Y = train_data[:,4]
X = X.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
# encode class values as integers
encoder = LabelEncoder()
encoder.fit(Y)
encoded_Y = encoder.transform(Y)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y = np_utils.to_categorical(encoded_Y)
X_train_s = scaler.fit_transform(X)
return (X_train_s, dummy_y)
def network_mlp(X, Y, out_dim=10, b_size=30, num_classes=3, epochs=10):
#out_dim is the dimensionality of the hidden layer;
#b_size is the batch size. There are 150 examples total.
filepath="weights_mlp.hdf5"
def mlp_model():
model = Sequential()
model.add(Dense(out_dim, input_dim=4, activation='relu', kernel_initializer='he_uniform'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]
estimator = KerasClassifier(build_fn=mlp_model, epochs=epochs, batch_size=b_size, verbose=0, callbacks=callbacks_list)
kfold = KFold(n_splits=10, shuffle=True, random_state=7)
results = cross_val_score(estimator, X, Y, cv=kfold)
print("MLP: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
return 0
def network_mlp_no_callbacks(X, Y, out_dim=10, b_size=30, num_classes=3, epochs=10):
def mlp_model():
model = Sequential()
model.add(Dense(out_dim, input_dim=4, activation='relu', kernel_initializer='he_uniform'))
model.add(Dense(num_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
estimator = KerasClassifier(build_fn=mlp_model, epochs=epochs, batch_size=b_size, verbose=0)
kfold = KFold(n_splits=10, shuffle=True, random_state=7)
results = cross_val_score(estimator, X, Y, cv=kfold)
print("MLP: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100))
return 0
if __name__=='__main__':
X, Y = read_data_mlp('iris.csv')
network_mlp_no_callbacks(X, Y, out_dim=10, b_size=30, num_classes=3, epochs = 10)
#network_mlp(X, Y, out_dim=10, b_size=30, num_classes=3, epochs = 10)
질문 : 어떻게 모델 콜백을 KerasClassifier에 통합 할 수 있습니까?