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"
[5] https://aunsharekar.wixsite.com/my-site/post/flower-image-classifier