0

Ich habe versucht, trainieren und Lernkurve in Keras zu testen, aber der folgende Code produziert KeyError: 'val_acc error.Plotten Lernkurve in Keras gibt KeyError: 'val_acc'

Das offizielle Dokument <https://keras.io/callbacks/> besagt, dass, um 'val_acc' zu verwenden, ich Validierungs- und Genauigkeitsüberwachung aktivieren muss, die ich nicht verstehe und weiß nicht, wie man in meinem Code verwendet.

Jede Hilfe würde sehr geschätzt werden. Danke.

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() 

Antwort

3

Möglicherweise müssen Sie die Validierungsaufteilung Ihres Triebzuges aktivieren. Normalerweise erfolgt die Validierung in 1/3 des Zuges. Nehmen Sie in Ihrem Code die Änderung wie folgt vor:

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

Es funktioniert!