簡體   English   中英

我的 model 得到了 94% 我認為它不對而且沒有意義

[英]My model got 94% I dont think its right andit doesnt make sense

嗨,所以我最近制作了一個可以對鮮花進行分類的 AI 程序,它說當我運行 Model.fit_generator 時它說我得到了 94% 的准確率,當我搜索記錄的最高精度時它也是 94% 只是聽起來不對就像我 2 個月前剛開始使用 neural.networks,它說我得到了一家公司相同的准確度,我才剛剛開始。我還使用了來自 colab 的 TPU

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% 的 acc。 抱歉我的英語不是我的母語

首先,您需要 go 完成基本的 ML 課程並建立一些基礎,以了解您在這里想要實現的目標。 讓你的model 過度擬合並獲得 99.9% 的准確率是非常簡單和容易的,但也是錯誤的。 我很高興您的代碼可以過度擬合並為您提供您提到的准確性。 您的代碼沒有任何問題。

我會建議您使用 plot 驗證損失和准確性,這可能會幫助您了解發生了什么,並且肯定會告訴您 model 是否過擬合。

您還可以對經過預處理的新圖像使用model.predict來實際檢查您的網絡是否運行良好。

我會建議您將數據分成三個不同的集合:訓練、驗證和測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM