Я обучаю модель, которая классифицирует 3 класса. У меня 120 изображений только на класс, а всего 3 класса. Я обучил модель, но разница между точностью обучения и тестирования велика. Что он указывает, находится ли модель в переобучении или что-то еще.
Разница между точностью данных поезда и теста различается. Итак, теперь я получил:
- Оценка модели на данных поезда [0,29664946870370346, 0,91636366]
- Оценка модели на тестовых данных [0,4278888224678881, 0,8088235]
Потери тоже высокий. Что мне следует учитывать, чтобы уменьшить потери и уменьшить разницу между данными поездов и тестами? Последнее, что я создаю свой собственный набор данных, и этого достаточно для многослойного персептрона.
Я разделяю 120 изображений в поезд и тест. 100 для поезда и 20 для теста. Достаточно?
import time
import numpy as np
import tensorflow as tf
from tensorflow.keras.callbacks import TensorBoard
from sklearn.model_selection import cross_val_score
from keras.wrappers.scikit_learn import KerasClassifier
data = np.load('E:\Python Telusko\OpenCv\desc_feat.npy', allow_pickle=True)
from sklearn.model_selection import train_test_split
NAME="ITA MLP-{}".format(int(time.time()))
tensorboard=TensorBoard(log_dir="E:\\ITA MLP\\logs\\{}".format(NAME))
training_data = np.asarray([i[0] for i in data])
train_labels = data[:, -1]
print("Shape of training data", training_data.shape)
print("Labels of training data", train_labels.shape)
data = training_data.astype('float32')
data = data / 255
from tensorflow.keras import utils as np_utils
from sklearn.model_selection import KFold
one_hot_train_labels = np_utils.to_categorical(train_labels)
def create_model():
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(64, input_shape=(128,) , activation = 'relu'))
model.add(tf.keras.layers.Dense(3, activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam' , metrics = ['accuracy'] )
return model
n_split=5
for train_index,test_index in KFold(n_split).split(data):
x_train,x_test=data[train_index],data[test_index]
y_train,y_test=one_hot_train_labels[train_index],one_hot_train_labels[test_index]
model=create_model()
model.fit(x_train, y_train,epochs=30,batch_size=32,callbacks=[tensorboard])
print('Model evaluation on train data ',model.evaluate(x_train,y_train))
print('Model evaluation on test data',model.evaluate(x_test,y_test))
model.save('SuperClassPredictions1.model')