[英]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.