Моя модель получила 94%, я не думаю, что это правильно и это не имеет смысла

#python #tensorflow #keras #conv-neural-network

#python #тензорный поток #keras #conv-neural-network

Вопрос:

Привет, недавно я создал программу искусственного интеллекта, которая может классифицировать цветы, и она говорит, что когда я запустил Model.fit_generator, в ней говорится, что я получил точность 94%, и когда я искал рекорд по максимальной точности, также было 94%, и это звучит неправильно, как будто я только запустил нейронные сети 2 месяца назад, и в ней говорится, что я получил ту же точность, что и компания, и я только начал.Также я использовал TPU от colab

 import os 
import numpy as np
import pickle 
from tensorflow import keras 
import cv2
import matplotlib.pyplot as plt
import random
from keras.preprocessing.image import ImageDataGenerator
os.getcwd()
data = []
img_size = 175
categories = ["daisy", "dandelion", "rose", "sunflower", "tulip","Lily","aster","blue bonet","Camellia","gardinia","Lavander","Azalea"]
def create_data():
    for category in categories:
        path = os.path.join('image_data/image_data/Train', category)
        class_num = categories.index(category)
        for img in os.listdir(path):
            img_arr = cv2.imread(os.path.join(path, img))
            try:
                new_arr = cv2.resize(img_arr, (img_size, img_size))
            except cv2.error as e:
                print('Not valid')
            cv2.waitKey()
            
            data.append([new_arr, class_num])

create_data()
random.shuffle(data)
X=[]
y=[]

for features, labels in data:
    X.append(features)
    y.append(labels)

X = np.array(X).reshape(-1, img_size, img_size, 3)
y = np.array(y)
print('Shape of X: ', X.shape)
print('Shape of y: ', y.shape)
pickle_out = open('X.pickle', 'wb')

pickle.dump(X, pickle_out)

pickle_out_2 = open('y.pickle', 'wb')

pickle.dump(y, pickle_out_2)
X = X / 255.0
from sklearn.preprocessing import LabelEncoder
from keras.utils import to_categorical
le = LabelEncoder()
y= le.fit_transform(y)
y = to_categorical(y,12)
y.shape
from sklearn.model_selection import train_test_split

X_train, X_valid, y_train, y_valid = train_test_split(X, y, train_size = 0.8, random_state= 7)
datagen = ImageDataGenerator(
        featurewise_center=False,  
        samplewise_center=False,  
        featurewise_std_normalization=False, 
        samplewise_std_normalization=False, 
        zca_whitening=False,  
        rotation_range=10,  
        zoom_range = 0.1,
        width_shift_range=0.2,  
        height_shift_range=0.2, 
        horizontal_flip=True, 
        vertical_flip=False) 
datagen.fit(X_train)
model = keras.models.Sequential([keras.layers.Conv2D(32, 5, activation='relu', padding='SAME', input_shape=X.shape[1:]),
                                keras.layers.MaxPooling2D(2),
                                
                                keras.layers.Conv2D(64, 3, activation='relu', padding='SAME'),
                                keras.layers.MaxPooling2D(pool_size=2),
                        
                                
                                keras.layers.Conv2D(96, 3, activation="relu", padding="same"),
                                keras.layers.MaxPooling2D(pool_size=2),
                               
                                keras.layers.Conv2D(128, 3, activation="relu", padding="same"),
                                
                                keras.layers.MaxPooling2D(pool_size=2),
                                
                                keras.layers.Flatten(),
                                
                                keras.layers.Dense(500, activation='relu'),
                                keras.layers.Dropout(0.7),
                                keras.layers.Dense(12, activation='softmax')
                                ])
model.compile(optimizer = keras.optimizers.Adam(learning_rate=0.001), loss = 'categorical_crossentropy', metrics=['accuracy'])
#history = model.fit_generator(datagen.flow(X_train, y_train, batch_size=128), epochs=70, validation_data=(X_valid, y_valid))
model.fit(X_train, y_train, batch_size=128, epochs=70,validation_data=(X_valid, y_valid))
model.save("model1.h5")
  

не могли бы вы, пожалуйста, посмотреть, действительно ли я получил 94% соответствия. Извините за мой английский, это не мой родной язык

Комментарии:

1. Пожалуйста, не вставляйте Python в виде фрагментов HTML-кода

2. Извините, я обычно никогда не использую stack overflow

Ответ №1:

Прежде всего, вам нужно пройти базовый курс ML и создать некоторую базу, чтобы знать, чего именно вы пытаетесь достичь здесь. Заставить вашу модель переоборудоваться и получить точность 99,9% довольно просто, но также и неправильно. Я уверен, что ваш код может быть доработан и дать вам точность, о которой вы упомянули. В вашем коде нет ничего плохого.

Ответ №2:

Я бы порекомендовал вам отобразить потери при проверке и точность, это может помочь вам понять, что произошло, и определенно сообщит вам, подходит ли ваша модель.

Вы также можете использовать model.predict на новых предварительно обработанных изображениях, чтобы фактически проверить, хорошо ли работает ваша сеть.

Я бы рекомендовал вам разделить ваши данные на три разных набора: обучение, проверка и тест.