Я пытаюсь закодировать классификатор изображений фруктов с помощью python, попробуйте классифицировать 7 фруктов. У меня есть 15077 изображений для train_set и 4204 изображений для validation_set. Я скомпилировал код для 10 эпох и получил следующие результаты:
Обучить на 15077 образцах, проверить на 4204 образцах Эпоха 1/10 15077/15077 [============= =================] - 264 с 17 мс / шаг - потеря: 1.0652 - точность: 0.5325 - val_loss: 0.3722 - val_accuracy: 0.8428 Эпоха 2/10 15077/15077 [=== ===========================] - 256 с 17 мс / шаг - потеря: 0,4236 - точность: 0,8405 - val_loss: 0,2910 - val_accuracy: 0,9034 эпохи 3/10 15077/15077 [==============================] - 499 с 33 мс / шаг - потеря: 0,2682 - точность: 0.9107 - val_loss: 0.3614 - val_accuracy: 0.8830 Эпоха 4/10 15077/15077 [==============================] - 243 сек. 16 мс / шаг - потеря: 0,2022 - точность: 0,9381 - val_loss: 0,0985 - val_accuracy: 0,9724 Эпоха 5/10 15077/15077 [======================= =======] - 245 с 16 мс / шаг - потеря: 0,1500 - точность: 0,9548 - val_loss: 0,1258 - val_accuracy: 0,9536 Эпоха 6/10 15077/15077 [============= =================] - 253 с 17 мс / шаг - потеря: 0,1509 - точность: 0,9529 - val_loss: 0,1831 - val_ точность: 0,9317 Эпоха 7/10 15077/15077 [==============================] - 245 с 16 мс / шаг - потеря: 0.1020 - точность: 0,9678 - val_loss: 0,2164 - val_accuracy: 0,9391 Эпоха 8/10 15077/15077 [============================= =] - 255 с 17 мс / шаг - потеря: 0,0668 - точность: 0,9816 - val_loss: 0,3004 - val_accuracy: 0,9229 Эпоха 9/10 15077/15077 [=================== ===========] - 243 с 16 мс / шаг - потеря: 0,1081 - точность: 0,9704 - val_loss: 1,4997 - val_accuracy: 0,8639 Эпоха 10/10 15077/15077 [========= =====================] - 240 с 16 мс / шаг - потеря: 0,0765 - точность: 0,9784 - val_loss: 0,1763 - val_accuracy: 0,9424 Потери при тестировании: 0,17632227091173225 Точность теста: 0,9424358010292053 Интересно, почему точность действует как волна греха? Я думаю, он должен увеличиваться с каждой эпохой. У вас есть рекомендации по изменению кода? Спасибо за ответ.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
import cv2
import tensorflow as tf
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
from keras.layers import LSTM, Input, TimeDistributed
from keras.models import Model
from keras.optimizers import RMSprop, SGD
# Import the backend
from keras import backend as K
dataDirTrain = "C:/Users/TCSEAKIN/Desktop/Py/AI-hack/AI/Training"
dataDirTest = "C:/Users/TCSEAKIN/Desktop/Py/AI-hack/AI/Test"
categories = ["Armut", "Cilek", "Elma_Kirmizi", "Elma_Yesil", "Mandalina", "Muz","Portakal"]
training_data = []
test_data = []
for category in categories:
path = os.path.join(dataDirTrain, category)
class_num = categories.index(category)
for img in os.listdir(path):
try:
imgTrainArray = cv2.imread(os.path.join(path,img))
newTrainArray = cv2.resize(imgTrainArray, (50, 50))
training_data.append([newTrainArray, class_num])
except Exception as e:
pass
for category in categories:
path = os.path.join(dataDirTest, category)
class_num = categories.index(category)
for img in os.listdir(path):
try:
imgTestArray = cv2.imread(os.path.join(path,img))
newTestArray = cv2.resize(imgTestArray, (50, 50))
test_data.append([newTestArray, class_num])
except Exception as e:
pass
X_train = []
x_test = []
y_train = []
y_test = []
for features, label in training_data:
X_train.append(features)
y_train.append(label)
for features, label in test_data:
x_test.append(features)
y_test.append(label)
X_train = np.array(X_train).reshape(-1, 50, 50, 3)
y_train = np.array(y_train).reshape(-1, 1)
x_test = np.array(x_test).reshape(-1, 50, 50, 3)
y_test = np.array(y_test).reshape(-1, 1)
X_train = X_train/255
x_test = x_test/255
from keras.utils import to_categorical
Y_train_one_hot = to_categorical(y_train)
Y_test_one_hot = to_categorical(y_test)
model_cnn = Sequential()
# First convolutional layer, note the specification of shape
model_cnn.add(Conv2D(64, kernel_size=(3, 3),activation='relu',input_shape=(50, 50, 3)))
model_cnn.add(Conv2D(128, (3, 3), activation='relu'))
model_cnn.add(MaxPooling2D(pool_size=(2, 2)))
model_cnn.add(Conv2D(256, (3, 3), activation='relu'))
model_cnn.add(MaxPooling2D(pool_size=(2, 2)))
model_cnn.add(Dropout(0.5))
model_cnn.add(Flatten())
model_cnn.add(Dense(128, activation='relu'))
model_cnn.add(Dropout(0.5))
model_cnn.add(Dense(64, activation='relu'))
model_cnn.add(Dropout(0.5))
model_cnn.add(Dense(7, activation='softmax'))
model_cnn.compile(loss="categorical_crossentropy",
optimizer="adam",
metrics=['accuracy'])
model_cnn.fit(X_train, Y_train_one_hot,
batch_size=64,
epochs=10,
verbose=1,
validation_data=(x_test, Y_test_one_hot))
score = model_cnn.evaluate(x_test, Y_test_one_hot, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
model_cnn.save("C:/Users/TCSEAKIN/Desktop/Training3.py"