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

در این مقاله نوع تصویر را طبقه بندی خواهیم کرد. با ایجاد یک مدل یادگیری عمیق که می تواند سگ ها و گربه های ساخته شده از Tensorflow را با استفاده از تکنیک های شبکه Consorfotional (CNN) که معمولاً در طبقه بندی تصویر استفاده می شود ، طبقه بندی کند. که می تواند به راحتی از طریق Google Colab استفاده شود
روند کار به شرح زیر است.
- وارداتی که لازم است
- بارگیری و تهیه اطلاعات
- اطلاعات و پیش پردازش را تهیه کنید
- مدل CNN را ایجاد کنید
- مدلهای کمیته و تمرین
- مدل را با تصاویر واقعی آزمایش کنید
- نتایج پیش بینی را نشان دهید
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 را برای طبقه بندی تصویر سگ و گربه ایجاد کردیم. بنابراین ما دانش اصلی را در دسته های دیگر اعمال می کنیم. به این معنی که ما تصویر میوه ، سیب و انگور را طبقه بندی خواهیم کرد. کد در برخی از قسمت ها به شرح زیر تغییر خواهد کرد
روند کار به شرح زیر است.
- وارداتی که لازم است
- Google Drive را وصل کنید و اطلاعات را بررسی کنید.
- مجموعه داده ها را از پوشه بارگیری کنید
- مدل CNN را ایجاد کنید
- مدلهای کمیته و تمرین
- مدل را با تصاویر واقعی آزمایش کنید
- نتایج پیش بینی را نشان دهید
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 هم برای طبقه بندی سگ ها و گربه ها. و سیب و انگور از آماده سازی داده ها ایجاد یک آموزش مدل برای تست با تصاویر واقعی و از یک مثال جدید که با آن آزمایش می شود ، می تواند تعداد تصاویر مورد استفاده بیشتر در نتایج دقیق تر باشد ، تمام یادگیری مبنای مهمی برای استفاده از یادگیری ماشین برای سایر پسوندها در آینده است.