#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
на новых предварительно обработанных изображениях, чтобы фактически проверить, хорошо ли работает ваша сеть.
Я бы рекомендовал вам разделить ваши данные на три разных набора: обучение, проверка и тест.