2017-01-30 4 views
0

Мне нужна помощь в реализации функции контрольной точки в Keras. Я собираюсь подготовить большой набор данных, чтобы сделать это, сначала я обучил модель с использованием набора данных цветка радужной оболочки: http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/Модифицированные модели Checkpoint в Keras

Поскольку мой собственный набор данных очень похож на него, только разница в том, что мой набор данных больше больше.

Для контрольной точки функции: http://machinelearningmastery.com/check-point-deep-learning-models-keras/

Я понимаю, к примеру, используя Пим-индеец набор данные. Теперь я пытаюсь реализовать ту же функцию контрольной точки в скрипте iris-flower. Вот что я пробовал до сих пор.

import numpy 
from pandas import * 
from keras.models import Sequential 
from keras.layers import Dense 
from keras.wrappers.scikit_learn import KerasClassifier 
from keras.utils import np_utils 
from sklearn.model_selection import cross_val_score, KFold 
from sklearn.preprocessing import LabelEncoder 
from sklearn.pipeline import Pipeline 
from keras.callbacks import ModelCheckpoint 

seed = 7 
numpy.random.seed(seed) 

dataframe = read_csv("iris.csv", header=None) 
dataset = dataframe.values 
X = dataset[:,0:4].astype(float) 
Y = dataset[:,4] 

# encode class value as integers 
encoder = LabelEncoder() 
encoder.fit(Y) 
encoded_Y = encoder.transform(Y) 
dummy_y = np_utils.to_categorical(encoded_Y) 

def baseline_model(): 
    model = Sequential() 
    model.add(Dense(4, input_dim=4, init='normal', activation='relu')) 
    model.add(Dense(3, init='normal', activation='sigmoid')) 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    return model 

filepath="weights-improvement-{epoch:02d}-{val_acc:.2f}.hdf5" 
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max') 
callbacks_list = [checkpoint] 

estimator = KerasClassifier(build_fn=baseline_model, validation_split=0.33, nb_epoch=200, batch_size=5, callbacks=callbacks_list, verbose=0) 
kfold = KFold(n_splits=10, shuffle=True, random_state=seed) 
results = cross_val_score(estimator, X, dummy_y, cv=kfold) 
print("Baseline: %.2f%% (%.2f%%)" % (results.mean()*100, results.std()*100)) 

Этот скрипт произвел следующую ошибку. Я не знаю, как его устранить, или, может быть, мое расположение в скрипте неверно.

RuntimeError: Cannot clone object <keras.wrappers.scikit_learn.KerasClassifier object at 0x10e120fd0>, as the constructor does not seem to set parameter callbacks 

Я надеюсь, что кто-то может мне помочь. Спасибо.

+0

Вы знаете, какая строка вызывает ошибку? – jdehesa

ответ

1

Я думаю, что проблема в том, что ваша функция baseline_model() не возвращает модель, которую она создает; это должно быть примерно так:

def baseline_model(): 
    model = Sequential() 
    model.add(Dense(4, input_dim=4, init='normal', activation='relu')) 
    model.add(Dense(3, init='normal', activation='sigmoid')) 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    return model 
+0

спасибо, что указали это для меня. Я добавляю 'return model' к скрипту, но такая же ошибка возникает. – Ling

+0

@Ling. А, кажется, [вы не единственный с этой проблемой] (https://github.com/fchollet/keras/issues/4081). Глядя на [этот вопрос] (https://stackoverflow.com/questions/24510510/python-scikit-learn-cannot-clone-object-as-the-constructor-does-not-seem-to) и [источник] (https://github.com/fchollet/keras/blob/master/keras/wrappers/scikit_learn.py), это _might_ будет ошибкой в ​​программировании обертки. Вы можете попробовать 'оценщик = KerasClassifier (build_fn = baseline_model, ** {validation_split = 0.33, nb_epoch = 200, batch_size = 5, callbacks = callbacks_list, verbose = 0})' хотя idk, если это поможет. – jdehesa

+0

Благодарим вас за предложение, но оно возвращает синтаксическую ошибку на 'validation_split = 0.33'. Я изменяю строку, которая имеет один '=' в '==', но появилась еще одна ошибка, указывающая, что 'validation_split' не определен – Ling

0

Вместо KerasClassifier используйте модель.

model = baseline_model() 
#declare your callback methods here 
model.fit(x,y, batch_size=32, verbose=0, epochs=10, shuffle=True, validation_split = 0.1, callbacks = <your list of callbacks>) 
Смежные вопросы