برنامه نویسی

توسعه مدل یادگیری ماشین: یادگیری عمیق (CNN) با استفاده از پایتون و Tensorflow

در این مقاله نوع تصویر را طبقه بندی خواهیم کرد. با ایجاد یک مدل یادگیری عمیق که می تواند سگ ها و گربه های ساخته شده از Tensorflow را با استفاده از تکنیک های شبکه Consorfotional (CNN) که معمولاً در طبقه بندی تصویر استفاده می شود ، طبقه بندی کند. که می تواند به راحتی از طریق Google Colab استفاده شود

روند کار به شرح زیر است.

  1. وارداتی که لازم است
  2. بارگیری و تهیه اطلاعات
  3. اطلاعات و پیش پردازش را تهیه کنید
  4. مدل CNN را ایجاد کنید
  5. مدلهای کمیته و تمرین
  6. مدل را با تصاویر واقعی آزمایش کنید
  7. نتایج پیش بینی را نشان دهید

1. واردات کتابخانه لازم

import tensorflow as tf
import tensorflow_datasets as tfds
import matplotlib.pyplot as plt

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • اول از همه ، ما کتابخانه ای را که برای ایجاد یک مدل توسط tensorflow_datasets یا tfds لازم است ، می نامیم. یک داده پیش ساخته برای استفاده وجود دارد. لازم نیست خودتان آن را پیدا کنید. برای نمایش تصاویر

2. بارگیری و تهیه اطلاعات

(train_data, test_data), info = tfds.load(
    'cats_vs_dogs',
    split=['train[:80%]', 'train[80%:]'],
    with_info=True,
    as_supervised=True
)

print("Number of training images:", int(info.splits['train'].num_examples * 0.8))
print("Number of test images:", int(info.splits['train'].num_examples * 0.2))

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • دانلود مجموعه داده (cats_vs_dogs) از مجموعه داده های tensorflow.
  • داده ها را به 2 بخش تقسیم کنید: آموزش 80 ٪ و مجموعه تست 20 ٪ و اطلاعات را برای آماده سازی آماده کنید (جفت تصویر-لاابل از طریق AS_SUPERVISED = TRUE).
  • این خروجی دریافت می کند:

شرح تصویر

3. اطلاعات و پیش پردازش را تهیه کنید

IMG_SIZE = 128
BATCH_SIZE = 32

# ใช้ Data Augmentation เฉพาะกับชุด train
data_augmentation = tf.keras.Sequential([
    tf.keras.layers.RandomFlip('horizontal'),
    tf.keras.layers.RandomRotation(0.1),
    tf.keras.layers.RandomZoom(0.1)
])

def preprocess(image, label, augment=False):
    image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
    image = image / 255.0
    if augment:
        image = data_augmentation(image)
    return image, label

# Apply preprocessing
train_data = train_data.map(lambda x, y: preprocess(x, y, augment=True), num_parallel_calls=tf.data.AUTOTUNE)
test_data = test_data.map(lambda x, y: preprocess(x, y), num_parallel_calls=tf.data.AUTOTUNE)

# ทำ batching และ prefetch
train_data = train_data.shuffle(1000).batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)
test_data = test_data.batch(BATCH_SIZE).prefetch(tf.data.AUTOTUNE)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • اجازه دهید همه تصاویر به همان اندازه باشند. (128×128) پیکسل تعداد تصاویر در هر مجموعه (batch_size) = 32
  • مقدار پیکسل را در محدوده 0-1 تنظیم کنید.
  • فقط از افزایش داده ها استفاده کنید. قطار برای افزایش تنوع داده ها ، مانند چرخاندن تصویر ، تنظیم شده است.
  • از .batch () و .prefetch () استفاده کنید تا مدل قطار به سرعت و کارآمدتر شود.

4. مدل CNN را ایجاد کنید

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 3)),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Dropout(0.3),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.3),
    tf.keras.layers.Dense(1, activation='sigmoid')  
])

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • این مدل از ساختار CNN (CNN (CNNN (شبکه حل)) استفاده می کند.
  • CONV2D: 3 لایه وجود دارد. Convolutional برای کشیدن ویژگی ها از تصویر و هر طبقه و به دنبال آن MaxPooling برای بالا بردن اندازه و کاهش پیچیدگی
  • صاف ، تصاویر را به یک ردیف داده تبدیل کنید تا به لایه متراکم ارسال شود.
  • ترک تحصیل برای کاهش بیش از حد
  • متراکم (128 ، فعال سازی = 'Relu') از RELU برای کمک به مدل در درک اطلاعات پیچیده استفاده می کند.
  • متراکم (1 ، فعال سازی = 'sigmoid') برای طبقه بندی کلاس 2 ، مانند سگ و گربه ، و در نتیجه ارزش بین 0-1

5.com. com -com -and تمرین

# คอมไพล์โมเดล
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=['accuracy'])

# เพิ่ม early stopping
early_stop = tf.keras.callbacks.EarlyStopping(monitor="val_loss", patience=3, restore_best_weights=True)

history = model.fit(
    train_data,
    validation_data=test_data,
    epochs=5,
    callbacks=[early_stop]
)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • جامعه برای مدل های یادگیری
  • توقف زود هنگام دقیقاً در 3 دور جدید افزایش نمی یابد ، آموزش را متوقف می کند.
  • آموزش مدل (مناسب) آموزش 5 (دوره)

خروجی
شرح تصویر

6. مدل را با تصاویر واقعی آزمایش کنید.

for images, labels in test_data.shuffle(100).take(1):
    for i in range(2):
        img = images[i]
        true_label = labels[i].numpy()
        prediction = model.predict(tf.expand_dims(img, axis=0))[0][0]
        predicted_label = 1 if prediction > 0.5 else 0

        print("Prediction:", "Dog" if predicted_label == 1 else "Cat")
        print("Actual label:", "Dog" if true_label == 1 else "Cat")
        print("---")

        plt.imshow(img)
        plt.axis("off")
        plt.show()

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • ما تصویر را از مجموعه آزمون (مجموعه آزمون) تصادفی می کنیم و به مدل می دهیم. “سگ” یا “گربه” را حدس بزنید.
  • دریافت بیش از 0.5 سگ (1) ، کمتر از آن گربه (0) ، سپس نشان دادن تصویر و گفتن:
  • مدل پیش بینی چیست؟
  • پاسخ واقعی (برچسب واقعی)

7. نتایج پیش بینی را نشان دهید

شرح تصویر

و در مرحله بعد ، ما سعی خواهیم کرد با تغییر نوع طبقه بندی یک مثال جدید ایجاد کنیم

بعد از اینکه مدل CNN را برای طبقه بندی تصویر سگ و گربه ایجاد کردیم. بنابراین ما دانش اصلی را در دسته های دیگر اعمال می کنیم. به این معنی که ما تصویر میوه ، سیب و انگور را طبقه بندی خواهیم کرد. کد در برخی از قسمت ها به شرح زیر تغییر خواهد کرد

روند کار به شرح زیر است.

  1. وارداتی که لازم است
  2. Google Drive را وصل کنید و اطلاعات را بررسی کنید.
  3. مجموعه داده ها را از پوشه بارگیری کنید
  4. مدل CNN را ایجاد کنید
  5. مدلهای کمیته و تمرین
  6. مدل را با تصاویر واقعی آزمایش کنید
  7. نتایج پیش بینی را نشان دهید

1. واردات کتابخانه لازم

import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import EarlyStopping
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • کتابخانه ای را که لازم است برای ایجاد مدلی شبیه به TensorFlow_Datasets لازم باشد ، اجرا کنید. و در صورت عدم توسعه ، آموزش توقف اولیه را اضافه کنید.

2. Drive Google را وصل کنید و اطلاعات را بررسی کنید.

2.1

from google.colab import drive
drive.mount('/content/drive')
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • Google Colab را با Google Drive ما وصل کنید تا به فایل تصویر مدل دسترسی پیدا کنید.

2.2

!ls "/content/drive/MyDrive/fruit_images"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • سپس از دستور استفاده کنید! LS برای دیدن اینکه آیا پوشه ها و تصاویر در درایو واقعی وجود دارد یا خیر.

  • خروجی که بیرون می آید به این معنی است که پوشه ای به نام “سیب” و “انگور” وجود دارد.

شرح تصویر

3. مجموعه داده را از پوشه بارگیری کنید.

# โหลด dataset จากโฟลเดอร์
train_data = tf.keras.utils.image_dataset_from_directory(
    '/content/drive/MyDrive/fruit_images',
    validation_split=0.2,
    subset="training",
    seed=123,
    image_size=(IMG_SIZE, IMG_SIZE),
    batch_size=BATCH_SIZE
)

test_data = tf.keras.utils.image_dataset_from_directory(
    '/content/drive/MyDrive/fruit_images',
    validation_split=0.2,
    subset="validation",
    seed=123,
    image_size=(IMG_SIZE, IMG_SIZE),
    batch_size=BATCH_SIZE
)

# Prefetch ให้เร็วขึ้น
train_data = train_data.prefetch(tf.data.AUTOTUNE)
test_data = test_data.prefetch(tf.data.AUTOTUNE)


حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • با استفاده از دایرکتوری تصاویر میوه ای را که در Google Drive قرار دارند ، بکشید و داده ها را به 2 مجموعه تقسیم کنید

train_data (80 ٪) برای آموزش مدل

test_data (20 ٪) برای آزمایش

  • خروجی
    شرح تصویر

4. مدل CNN را ایجاد کنید

model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(IMG_SIZE, IMG_SIZE, 3)),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
    tf.keras.layers.MaxPooling2D(2,2),

    tf.keras.layers.Dropout(0.3),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.3),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این قسمت مانند طبقه بندی سگ ها و گربه ها است.

  • این مدل از ساختار CNN (CNN (CNNN (شبکه حل)) استفاده می کند.

5.com. com -com -and تمرین

# คอมไพล์โมเดล
model.compile(optimizer="adam", loss="binary_crossentropy", metrics=['accuracy'])

# เพิ่ม EarlyStopping
early_stop = tf.keras.callbacks.EarlyStopping(monitor="val_loss", patience=3, restore_best_weights=True)

# เทรนโมเดล
history = model.fit(
    train_data,
    validation_data=test_data,
    epochs= 5,
    callbacks=[early_stop]
)

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این قسمت مانند طبقه بندی سگ ها و گربه ها است.

  • جامعه برای مدل های یادگیری
  • توقف زود هنگام دقیقاً در 3 دور جدید افزایش نمی یابد ، آموزش را متوقف می کند.
  • آموزش مدل (مناسب) آموزش 5 (دوره)
  • خروجی که در بعضی دور دقت را افزایش داده است. هنوز هم برخی از بالا و پایین وجود دارد زیرا اطلاعات اندک است.
    شرح تصویر

6. مدل را با تصاویر واقعی آزمایش کنید.

# ทดสอบโมเดลกับภาพตัวอย่าง
for images, labels in test_data.shuffle(100).take(1):
    for i in range(2):
        img = images[i]
        true_label = labels[i].numpy()
        prediction = model.predict(tf.expand_dims(img, axis=0))[0][0]
        predicted_label = 1 if prediction > 0.5 else 0

        print("Prediction:", "Grape" if predicted_label == 1 else "Apple")
        print("Actual label:", "Grape" if true_label == 1 else "Apple")
        print("---")

        plt.imshow(img / 255.0)
        plt.axis("off")
        plt.show()
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

  • ما تصویر را از مجموعه آزمون (مجموعه آزمون) تصادفی می کنیم و به مدل می دهیم. حدس بزنید که این “سیب” یا “انگور” است.
  • دریافت بیش از 0.5 انگور (1) ، کمتر از آن سیب (0)
  • با توجه به تعداد تست های مورد استفاده برای آزمایش دقت ممکن است بی ثبات باشد.

7. نتایج پیش بینی را نشان دهید

شرح تصویر

پایان
در این مقاله ، ما آموخته ایم که یک مدل برای طبقه بندی تصاویر نیز ایجاد کنیم. شبکه عصبی Convolutional (CNN) با استفاده از Tensorflow هم برای طبقه بندی سگ ها و گربه ها. و سیب و انگور از آماده سازی داده ها ایجاد یک آموزش مدل برای تست با تصاویر واقعی و از یک مثال جدید که با آن آزمایش می شود ، می تواند تعداد تصاویر مورد استفاده بیشتر در نتایج دقیق تر باشد ، تمام یادگیری مبنای مهمی برای استفاده از یادگیری ماشین برای سایر پسوندها در آینده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا