Perdita e accuratezza: queste sono le curve di apprendimento ragionevoli?

Sto imparando le reti neurali e ne ho costruito uno semplice in Keras per la classificazione del set di dati dell’iride dal repository di apprendimento automatico UCI. Ho usato una rete a livello nascosto con 8 nodes nascosti. Adam Optimizer viene utilizzato con una velocità di apprendimento di 0.0005 ed è eseguito per 200 Epoch. Softmax viene utilizzato in uscita con perdita come catogorico-crossentropia. Sto ottenendo le seguenti curve di apprendimento.

Curva di apprendimento

Come potete vedere, la curva di apprendimento per l’accuratezza ha molte regioni piatte e non capisco perché. L’errore sembra diminuire costantemente ma la precisione non sembra aumentare allo stesso modo. Che cosa implicano le regioni piatte nella curva di apprendimento della precisione? Perché la precisione non aumenta in quelle regioni anche se l’errore sembra diminuire?

È normale nell’addestramento o è più probabile che io stia facendo qualcosa di sbagliato qui?

dataframe = pd.read_csv("iris.csv", header=None) dataset = dataframe.values X = dataset[:,0:4].astype(float) y = dataset[:,4] scalar = StandardScaler() X = scalar.fit_transform(X) label_encoder = LabelEncoder() y = label_encoder.fit_transform(y) encoder = OneHotEncoder() y = encoder.fit_transform(y.reshape(-1,1)).toarray() # create model model = Sequential() model.add(Dense(8, input_dim=4, activation='relu')) model.add(Dense(3, activation='softmax')) # Compile model adam = optimizers.Adam(lr=0.0005, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0) model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['accuracy']) # Fit the model log = model.fit(X, y, epochs=200, batch_size=5, validation_split=0.2) fig = plt.figure() fig.suptitle("Adam, lr=0.0006, one hidden layer") ax = fig.add_subplot(1,2,1) ax.set_title('Cost') ax.plot(log.history['loss'], label='Training') ax.plot(log.history['val_loss'], label='Validation') ax.legend() ax = fig.add_subplot(1,2,2) ax.set_title('Accuracy') ax.plot(log.history['acc'], label='Training') ax.plot(log.history['val_acc'], label='Validation') ax.legend() fig.show()