Penterjemah |. Chen Jun
Penilai |. Pada masa kini, dengan lelaran berterusan pembelajaran mesin dan algoritma pembelajaran mendalam, komputer telah dapat mengklasifikasikan imej yang ditangkap pada skala besar dengan ketepatan yang sangat tinggi. Pada masa ini, senario aplikasi algoritma lanjutan tersebut termasuk: mentafsir imej imbasan paru-paru untuk menentukan sama ada ia sihat, melakukan pengecaman muka melalui peranti mudah alih dan membezakan pelbagai jenis objek pengguna untuk peruncit.
Di bawah, saya akan membincangkan dengan anda aplikasi penglihatan komputer - klasifikasi imej, dan langkah demi langkah menunjukkan cara menggunakan TensorFlow untuk melatih model pada set data imej kecil.
1. Set data dan sasaran
Tujuan melatih model ini adalah untuk mengklasifikasikan imej ke dalam label masing-masing, iaitu: yang sepadan di atas. pejabat Nombor angka. Lazimnya, seni bina rangkaian saraf dalam menyediakan input, output, dua lapisan tersembunyi (Lapisan Tersembunyi) dan lapisan Tercicir untuk melatih model. CNN atau Convolutional Neural Network ialah pilihan pertama untuk mengenal pasti imej yang lebih besar Ia boleh menangkap maklumat yang berkaitan sambil mengurangkan jumlah input.
2. Persediaan
3. Hiperparameter
Saya akan memilih set hiperparameter yang betul melalui aspek berikut:import tensorflow as tf from tensorflow.keras.utils import to_categorical from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Flatten, Dense, Dropout params = { 'dropout': 0.25, 'batch-size': 128, 'epochs': 50, 'layer-1-size': 128, 'layer-2-size': 128, 'initial-lr': 0.01, 'decay-steps': 2000, 'decay-rate': 0.9, 'optimizer': 'adamax' } mnist = tf.keras.datasets.mnist num_class = 10 # split between train and test sets (x_train, y_train), (x_test, y_test) = mnist.load_data() # reshape and normalize the data x_train = x_train.reshape(60000, 784).astype("float32")/255 x_test = x_test.reshape(10000, 784).astype("float32")/255 # convert class vectors to binary class matrices y_train = to_categorical(y_train, num_class) y_test = to_categorical(y_test, num_class)
Seterusnya, anda perlu membentuk semula dan menormalkan imej latihan dan ujian. Antaranya, penormalan akan mengehadkan keamatan piksel imej kepada antara 0 dan 1.
Akhir sekali, kami menukar label latihan dan ujian kepada label terperingkat menggunakan kaedah to_categorical yang kami import sebelum ini. Ini sangat penting untuk menyampaikan kepada rangka kerja TensorFlow bahawa label output (iaitu: 0 hingga 9) adalah kelas, bukan jenis angka.
5. Reka bentuk seni bina rangkaian neural
Kami menukar matriks imej 2D kepada vektor dengan menambahkan Flatten untuk mentakrifkan struktur DNN (Deep Neural Network). Neuron input sepadan di sini dengan nombor dalam vektor.
Seterusnya, saya menggunakan kaedah Dense() untuk menambah dua lapisan padat tersembunyi dan mengekstrak hiperparameter daripada kamus "params" yang ditakrifkan sebelum ini. Kita boleh menggunakan "relu" (Unit Linear Diperbetulkan) sebagai fungsi pengaktifan lapisan ini. Ia adalah salah satu fungsi pengaktifan yang paling biasa digunakan dalam lapisan tersembunyi rangkaian saraf.
Kemudian, kami menambah lapisan Dropout menggunakan kaedah Dropout. Ia akan digunakan untuk mengelakkan overfitting semasa melatih rangkaian saraf. Lagipun, model overfitting cenderung untuk mengingati set latihan dengan tepat dan gagal untuk membuat generalisasi kepada set data yang tidak kelihatan.
输出层是我们网络中的最后一层,它是使用Dense() 方法来定义的。需要注意的是,输出层有10个神经元,这对应于类(数字)的数量。
# Model Definition # Get parameters from logged hyperparameters model = Sequential([ Flatten(input_shape=(784, )), Dense(params('layer-1-size'), activatinotallow='relu'), Dense(params('layer-2-size'), activatinotallow='relu'), Dropout(params('dropout')), Dense(10) ]) lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay( initial_learning_rate=experiment.get_parameter('initial-lr'), decay_steps=experiment.get_parameter('decay-steps'), decay_rate=experiment.get_parameter('decay-rate') ) loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True) model.compile(optimizer='adamax', loss=loss_fn, metrics=['accuracy']) model.fit(x_train, y_train, batch_size=experiment.get_parameter('batch-size'), epochs=experiment.get_parameter('epochs'), validation_data=(x_test, y_test),) score = model.evaluate(x_test, y_test) # Log Model model.save('tf-mnist-comet.h5')
至此,我们已经定义好了架构。下面让我们用给定的训练数据,来编译和训练神经网络。
首先,我们以初始学习率、衰减步骤和衰减率作为参数,使用ExponentialDecay(指数衰减学习率)来定义学习率计划。
其次,将损失函数定义为CategoricalCrossentropy(用于多类式分类)。
接着,通过将优化器 (即:adamax)、损失函数、以及各项指标(由于所有类都同等重要、且均匀分布,因此我选择了准确性)作为参数,来编译模型。
然后,我们通过使用x_train、y_train、batch_size、epochs和validation_data去调用一个拟合方法,并拟合出模型。
同时,我们调用模型对象的评估方法,以获得模型在不可见数据集上的表现分数。
最后,您可以使用在模型对象上调用的save方法,保存要在生产环境中部署的模型对象。
综上所述,我们讨论了为图像分类任务,训练深度神经网络的一些入门级的知识。您可以将其作为熟悉使用神经网络,进行图像分类的一个起点。据此,您可了解到该如何选择正确的参数集、以及架构背后的思考逻辑。
原文链接:https://www.kdnuggets.com/2022/12/guide-train-image-classification-model-tensorflow.html
Atas ialah kandungan terperinci Panduan untuk melatih model klasifikasi imej menggunakan TensorFlow. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!