0

J'essayais de tracer train et tester la courbe d'apprentissage dans keras, cependant, le code suivant produit KeyError: 'val_acc error.Tracer courbe d'apprentissage dans keras donne KeyError: 'val_acc'

Le document officiel <https://keras.io/callbacks/> indique que pour utiliser 'val_acc', je dois activer la validation et la surveillance de précision que je ne comprends pas et que je ne sais pas utiliser dans mon code.

Toute aide serait grandement appréciée. Merci.

seed = 7 
np.random.seed(seed) 

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

encoder = LabelEncoder() 
encoder.fit(Y) 
encoded_Y = encoder.transform(Y) 
dummy_y = np_utils.to_categorical(encoded_Y) 

kfold = StratifiedKFold(y=Y, n_folds=10, shuffle=True, random_state=seed) 
cvscores = [] 

for i, (train, test) in enumerate(kfold): 

    model = Sequential() 
    model.add(Dense(12, input_dim=4, init='uniform', activation='relu')) 
    model.add(Dense(3, init='uniform', activation='sigmoid')) 
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) 
    history=model.fit(X[train], dummy_y[train], nb_epoch=200, batch_size=5, verbose=0) 
    scores = model.evaluate(X[test], dummy_y[test], verbose=0) 
    print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) 
    cvscores.append(scores[1] * 100) 

print("%.2f%% (+/- %.2f%%)" % (np.mean(cvscores), np.std(cvscores))) 


print(history.history.keys()) 
# summarize history for accuracy 
plt.plot(history.history['acc']) 
plt.plot(history.history['val_acc']) 
plt.title('model accuracy') 
plt.ylabel('accuracy') 
plt.xlabel('epoch') 
plt.legend(['train', 'test'], loc='upper left') 
plt.show() 

Répondre

3

Vous devrez peut-être activer le partage de validation de votre rame. Habituellement, la validation se produit dans 1/3 de la rame. Dans votre code, effectuez la modification comme indiqué ci-dessous:

history=model.fit(X[train], dummy_y[train],validation_split=0.33,nb_epoch=200, batch_size=5, verbose=0) 

Cela fonctionne!