Umumiy koʻrinish

Ushbu blog men keras va tenser-flow yordamida yaratgan tasvir tasniflagichi haqida. Ushbu loyihaning maqsadi uch xil turdagi transport vositalarini - samolyotlar, mototsikl va shouner (yelkanli qayiqlar) o'rtasida farqlay oladigan tasvir tasniflagichini yaratish edi. Ushbu loyiha uchun men foydalangan ma'lumotlar to'plami kaggle-da mavjud bo'lib, u birinchi samolyotlar va mototsikllarning 800 ga yaqin rasmlari va shxunerlarning 60 ga yaqin tasvirlaridan iborat. Yuqori aniqlikka erishish uchun men ushbu modelda turli sinovlarni o'tkazdim.

Men Tensorflow Version 2.9.2 Keras Version 2.9.0 dan foydalanganman

Model

Men ushbu loyihada CNN (Convolutional Neural Network) modelidan foydalanganman. Ushbu model neyron tarmoqlarga asoslangan va tasvirni qayta ishlash uchun ishlatiladigan mashhur modellardan biridir. CNN haqida qo'shimcha ma'lumotni "bu erda" topishingiz mumkin.

Loyihaning borishi

Avval men ushbu loyiha uchun zarur bo'lgan kutubxonalarni import qildim. Keyin ma'lumotlar to'plamiga kirish uchun Google diskimni ushbu daftarga o'rnatdim. Keyinchalik, men ma'lumotlarni oldindan qayta ishladim va o'quv va sinov ma'lumotlarini o'zgaruvchilarda saqladim. Ma'lumotlarni muvaffaqiyatli qayta ishlashdan so'ng, keyingi qadamim modelni yaratish edi. Bu loyihaning eng muhim bosqichidir, chunki men sinov va xato orqali giperparametrlarni qayta belgilab oldim va modelning aniqligini oshirish bo'yicha ko'plab muvaffaqiyatsiz urinishlardan so'ng muvaffaqiyatga erishdim. Shundan so'ng men testdagi modelning o'rtacha aniqligini, shuningdek, yaxshi bo'lgan poezd ma'lumotlar to'plamini olish orqali aniqlik bo'yicha tahlil qildim. Nihoyat, men sinov uchun ma'lumotlarning prognozlar katalogidan ko'rinmas tasvirni qayta ishlayman va model aniq natijalarni ishlab chiqara oladimi yoki yo'qligini tekshiraman va ajablanarli emaski, model tasvirni to'g'ri taniy olgan.

Kutubxonalarni import qilish

import numpy as np
import keras
import tensorflow as tf
from keras.preprocessing.image import ImageDataGeneratorfrom keras.utils import load_img, img_to_array

Drayvni o'rnatish

from google.colab import drive
drive.mount('/content/drive', force_remount=True)

Ma'lumotlarni oldindan qayta ishlash

Tasvirga oldindan ishlov berish

train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) training_set = train_datagen.flow_from_directory( '/content/drive/MyDrive/data/training_set', target_size=(64, 64), batch_size=32, class_mode='categorical')

Tasvirga oldindan ishlov berishni sinab ko'ring

test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
'/content/drive/MyDrive/data/testing_set',
target_size=(64, 64),
batch_size=32,
class_mode='categorical')

Modelni qurish

cnn = tf.keras.models.Sequential()

Qurilish konvolyutsiyasi qatlami

cnn.add(tf.keras.layers.Conv2D(filters=128 , kernel_size=3 , activation='relu' , input_shape=[64,64,3])) #increased the filters from 64 to 128
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2))
cnn.add(tf.keras.layers.Conv2D(filters=128 , kernel_size=3 , activation='relu' )) #increased the filters from 64 to 128
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2 , strides=2))
cnn.add(tf.keras.layers.Dropout(0.5))
cnn.add(tf.keras.layers.Flatten())
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))
cnn.add(tf.keras.layers.Dense(units=3 , activation='softmax')) #changed the value of class from 5 to 3
cnn.compile(optimizer = 'rmsprop' , loss = 'categorical_crossentropy' , metrics = ['accuracy'])
model = cnn.fit(x = training_set , validation_data = test_set , epochs = 30)

Sinov ma'lumotlar to'plamida modelning o'rtacha aniqligini olish.

import statistics #doing the analysis on the mean accuracy of the test split
mean_accuracy = statistics.mean(model.history["val_accuracy"])
mean_accuracy #calculated the accuracy of train split

Sinov uchun koʻrinmaydigan tasvirni oldindan qayta ishlang.

from keras.preprocessing import image
test_image = keras.utils.load_img('/content/drive/MyDrive/data/predictions/image_0021 6.09.42 PM.jpg',target_size=(64,64))
test_image = keras.utils.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)
result = cnn.predict(test_image)
training_set.class_indices

Modelning chiqishini tekshirish

#made changes according to the projects requirements of 3 classes instead of 5 in original project. 
if result[0][0]==1:
    print('Motorbikes')
elif result[0][1]==1:
    print('airplanes')
elif result[0][2]==1:
    print('schooner')

natija matritsasi chop etish

print(result)

Mening hissam

Chiqishni optimallashtirish uchun mavjud kodga biron bir o'zgartirish kiritgan bo'lsam, men koddagi hissamni eslatib o'tdim.

Aniqlik tahlili

Men ushbu modelning aniqlik tahlilini Epoch vs Accuracy jadvalini tuzish orqali qildim. Ushbu grafikda ko'rinib turibdiki, modelni tayyorlash uchun davrlar sonini o'zgartirish orqali aniqlik biroz oshiriladi.

Asl loyihada [1] aniqlik atigi 70% ni tashkil qiladi, ammo bu loyihada aniqlik 90% atrofida. Bunga erishish uchun modeldagi filtrlarni 64 dan 128 gacha oshirdim.

Dastlabki loyihada[1] 5 ta sinf mavjud edi, ammo bu loyihada talabga ko'ra sinflar 3 taga o'zgartirildi.

Qiyinchiliklar

Mashinani o'rganish va ma'lumotlarni qazib olish bo'yicha ma'lumotga ega bo'lmaganim uchun men Google diskini o'rnatish va ma'lumotlar to'plamini yuklashdan tortib python sintaksisigacha bo'lgan ko'p joylarda kurashdim. Men foydalangan ikkita kutubxonaning turli funktsiyalarini tushunish men uchun hamma narsa qiyin edi. Ammo eng katta qiyinchilik allaqachon yaxshi sozlangan modelning aniqligini oshirish edi. Modelning giper parametrlarini nozik sozlashda bir nechta iz va xatolardan so'ng men ushbu modelning aniqligini oshirishga muvaffaq bo'ldim.

Ma'lumotnomalar

Men tasvirni aniqlash loyihasidan foydalandim | Ushbu loyihani o'rganish va ushbu loyihani amalga oshirish uchun Python Tensorflow va Keras video [1] va GitHub omboridagi kod [2] yordamida gullarni aniqlash tizimini yaratish. Mening hissam boʻyicha izohga ega boʻlmagan har qanday kod qatori havola qilingan GitHub omboridan koʻchiriladi [2]. Meni ushbu blogni yozishga ilhomlantirgan [5] blog postini ham eslatib o'tmoqchiman.

[1] https://www.youtube.com/watch?app=desktop&v=2gMZC-4WAQ4&ab_channel=SPOTLESSTECH

[2]https://github.com/animesh1012/machineLearning/blob/main/flower_recognition.ipynb

[3] Ma'lumotlar to'plami - "https://www.kaggle.com/datasets/maricinnamon/caltech101-airplanes-motorbikes-schooners"

[4] CNN-dagi maqola https://medium.com/r/ url=https%3A%2F%2Ftowardsdatascience.com%2Fconvolutional-neural-networks-explained-9cc5188c4939%23%3A~%3Atext%3DA%2520Convolutional 2520Neural%2520Tarmoq%252C%2520shuningdek%2Cbinary%2520representation%2520of%2520visual%2520data.

[5] https://aunsharekar.wixsite.com/my-site/post/flower-image-classifier