Dalam artikel ini, kami akan menggunakan TensorFlow dan Keras untuk mencipta pengelas imej yang boleh membezakan antara imej kucing dan anjing. Untuk melakukan ini, kami akan menggunakan set data cats_vs_dogs daripada set data TensorFlow. Set data terdiri daripada 25,000 imej berlabel kucing dan anjing, yang mana 80% digunakan untuk latihan, 10% untuk pengesahan dan 10% untuk ujian.
Kami mulakan dengan memuatkan set data menggunakan TensorFlow Datasets. Pisahkan set data kepada set latihan, set pengesahan dan set ujian, masing-masing menyumbang 80%, 10% dan 10% daripada data, dan tentukan fungsi untuk memaparkan beberapa imej sampel dalam set data.
<code>import tensorflow as tfimport matplotlib.pyplot as pltimport tensorflow_datasets as tfds# 加载数据(train_data, validation_data, test_data), info = tfds.load('cats_vs_dogs', split=['train[:80%]', 'train[80%:90%]', 'train[90%:]'], with_info=True, as_supervised=True)# 获取图像的标签label_names = info.features['label'].names# 定义一个函数来显示一些样本图像plt.figure(figsize=(10, 10))for i, (image, label) in enumerate(train_data.take(9)):ax = plt.subplot(3, 3, i + 1)plt.imshow(image)plt.title(label_names[label])plt.axis('off')</code>
Sebelum melatih model, data perlu dipraproses. Imej akan diubah saiz kepada saiz seragam 150x150 piksel, nilai piksel akan dinormalisasi antara 0 dan 1, dan data akan diproses secara kelompok supaya ia boleh diimport ke dalam model secara berkelompok.
<code>IMG_SIZE = 150</code>
Artikel ini akan menggunakan model MobileNet V2 yang telah dilatih sebagai model asas. Dan tambahkan lapisan pengumpulan purata global dan lapisan padat padanya untuk pengelasan. Artikel ini akan membekukan pemberat model asas supaya hanya pemberat lapisan atas dikemas kini semasa latihan.
<code>def format_image(image, label):image = tf.cast(image, tf.float32) / 255.0# Normalize the pixel valuesimage = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))# Resize to the desired sizereturn image, labelbatch_size = 32train_data = train_data.map(format_image).shuffle(1000).batch(batch_size)validation_data = validation_data.map(format_image).batch(batch_size)test_data = test_data.map(format_image).batch(batch_size)</code>
Artikel ini akan melatih model untuk 3 kitaran dan mengujinya pada set pengesahan selepas setiap kitaran untuk mengesahkan. Kami akan menyimpan model selepas latihan supaya kami boleh menggunakannya dalam ujian akan datang.
<code>base_model = tf.keras.applications.MobileNetV2(input_shape=(IMG_SIZE, IMG_SIZE, 3), include_top=False, weights='imagenet')base_model.trainable = False</code>
Sejarah Model
Jika anda ingin tahu bagaimana lapisan Mobilenet V2 berfungsi, seperti yang ditunjukkan di bawah adalah hasil daripada lapisan ini.
Selepas latihan selesai model akan dinilai pada ujian yang ditetapkan kepada lihat cara ia berfungsi Bagaimana ia berprestasi pada data baharu.
<code>global_average_layer = tf.keras.layers.GlobalAveragePooling2D()prediction_layer = tf.keras.layers.Dense(1)model = tf.keras.Sequential([base_model,global_average_layer,prediction_layer])model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=0.0001),loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy'])</code>
Akhir sekali, artikel ini akan menggunakan model untuk meramal beberapa imej sampel dalam set ujian dan menunjukkan hasilnya.
<code>global_average_layer = tf.keras.layers.GlobalAveragePooling2D()prediction_layer = tf.keras.layers.Dense(1)model = tf.keras.Sequential([base_model,global_average_layer,prediction_layer])model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=0.0001),loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),metrics=['accuracy'])</code>
Selesai! Kami mencipta pengelas imej yang boleh membezakan antara imej kucing dan anjing dengan menggunakan TensorFlow dan Keras. Dengan beberapa pelarasan dan penalaan halus, pendekatan ini juga boleh digunakan untuk masalah pengelasan imej yang lain.
Atas ialah kandungan terperinci Buat pengelas pembelajaran mendalam untuk gambar kucing dan anjing menggunakan TensorFlow dan Keras. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!