CNTK - Melatih Jaringan Neural
Di sini, kita akan memahami tentang pelatihan Jaringan Saraf di CNTK.
Melatih model di CNTK
Di bagian sebelumnya, kami telah mendefinisikan semua komponen untuk model pembelajaran mendalam. Sekarang saatnya melatihnya. Seperti yang telah kita bahas sebelumnya, kita bisa melatih model NN di CNTK menggunakan kombinasilearner dan trainer.
Memilih pelajar dan menyiapkan pelatihan
Pada bagian ini, kami akan mendefinisikan file learner. CNTK menyediakan beberapalearnersuntuk memilih dari. Untuk model kami, yang ditentukan di bagian sebelumnya, kami akan menggunakanStochastic Gradient Descent (SGD) learner.
Untuk melatih jaringan saraf, mari kita konfigurasikan learner dan trainer dengan bantuan langkah-langkah berikut -
Step 1 - Pertama, kita perlu mengimpor sgd fungsi dari cntk.lerners paket.
from cntk.learners import sgd
Step 2 - Selanjutnya, kita perlu mengimpor Trainer fungsi dari cntk.trainpaket .trainer.
from cntk.train.trainer import Trainer
Step 3 - Sekarang, kita perlu membuat file learner. Itu dapat dibuat dengan memohonsgd berfungsi bersama dengan memberikan parameter model dan nilai untuk kecepatan pembelajaran.
learner = sgd(z.parametrs, 0.01)
Step 4 - Akhirnya, kita perlu menginisialisasi trainer. Ini harus disediakan jaringan, kombinasi dariloss dan metric Bersama dengan learner.
trainer = Trainer(z, (loss, error_rate), [learner])
Kecepatan pembelajaran yang mengontrol kecepatan pengoptimalan harus berjumlah kecil antara 0,1 hingga 0,001.
Memilih pelajar dan menyiapkan pelatihan - Contoh lengkap
from cntk.learners import sgd
from cntk.train.trainer import Trainer
learner = sgd(z.parametrs, 0.01)
trainer = Trainer(z, (loss, error_rate), [learner])
Memasukkan data ke dalam pelatih
Setelah kami memilih dan mengonfigurasi pelatih, sekarang saatnya memuat kumpulan data. Kami telah menyimpaniris set data sebagai.CSV file dan kami akan menggunakan paket data wrangling bernama pandas untuk memuat set data.
Langkah-langkah untuk memuat set data dari file .CSV
Step 1 - Pertama, kita perlu mengimpor file pandas paket.
from import pandas as pd
Step 2 - Sekarang, kita perlu memanggil fungsi bernama read_csv berfungsi untuk memuat file .csv dari disk.
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’,
‘petal_length’, ‘petal_width’, index_col=False)
Setelah kami memuat dataset, kami perlu membaginya menjadi satu set fitur dan label.
Langkah-langkah untuk membagi dataset menjadi fitur dan label
Step 1- Pertama, kita perlu memilih semua baris dan empat kolom pertama dari dataset. Itu bisa dilakukan dengan menggunakaniloc fungsi.
x = df_source.iloc[:, :4].values
Step 2- Selanjutnya kita perlu memilih kolom spesies dari dataset iris. Kami akan menggunakan properti nilai untuk mengakses yang mendasarinyanumpy Himpunan.
x = df_source[‘species’].values
Langkah-langkah untuk menyandikan kolom spesies ke representasi vektor numerik
Seperti yang kita bahas sebelumnya, model kita didasarkan pada klasifikasi, itu membutuhkan nilai input numerik. Oleh karena itu, di sini kita perlu menyandikan kolom spesies ke representasi vektor numerik. Mari kita lihat langkah-langkah untuk melakukannya -
Step 1- Pertama, kita perlu membuat ekspresi daftar untuk mengulang semua elemen dalam array. Kemudian lakukan pencarian di kamus label_mapping untuk setiap nilai.
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
Step 2- Selanjutnya, konversikan nilai numerik yang dikonversi ini ke vektor enkode one-hot. Kami akan menggunakanone_hot berfungsi sebagai berikut -
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
Step 3 - Akhirnya, kita perlu mengubah daftar yang diubah ini menjadi numpy Himpunan.
y = np.array([one_hot(label_mapping[v], 3) for v in y])
Langkah-langkah untuk mendeteksi overfitting
Situasinya, saat model Anda mengingat sampel tetapi tidak dapat menyimpulkan aturan dari sampel pelatihan, terjadi overfitting. Dengan bantuan langkah-langkah berikut, kami dapat mendeteksi overfitting pada model kami -
Step 1 - Pertama, dari sklearn paket, impor train_test_split fungsi dari model_selection modul.
from sklearn.model_selection import train_test_split
Step 2 - Selanjutnya, kita perlu memanggil fungsi train_test_split dengan fitur x dan label y sebagai berikut -
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2,
stratify=y)
Kami menentukan test_size 0,2 untuk menyisihkan 20% dari total data.
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
Langkah-langkah untuk memasukkan set pelatihan dan set validasi ke model kita
Step 1 - Untuk melatih model kita, pertama, kita akan memanggil train_minibatchmetode. Kemudian berikan kamus yang memetakan data masukan ke variabel masukan yang telah kita gunakan untuk mendefinisikan NN dan fungsi kerugian yang terkait.
trainer.train_minibatch({ features: X_train, label: y_train})
Step 2 - Selanjutnya, telepon train_minibatch dengan menggunakan for loop -
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))
Memasukkan data ke pelatih - Contoh lengkap
from import pandas as pd
df_source = pd.read_csv(‘iris.csv’, names = [‘sepal_length’, ‘sepal_width’, ‘petal_length’, ‘petal_width’, index_col=False)
x = df_source.iloc[:, :4].values
x = df_source[‘species’].values
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
def one_hot(index, length):
result = np.zeros(length)
result[index] = 1
return result
y = np.array([one_hot(label_mapping[v], 3) for v in y])
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0-2, stratify=y)
label_mapping = {‘Iris-Setosa’ : 0, ‘Iris-Versicolor’ : 1, ‘Iris-Virginica’ : 2}
trainer.train_minibatch({ features: X_train, label: y_train})
for _epoch in range(10):
trainer.train_minbatch ({ feature: X_train, label: y_train})
print(‘Loss: {}, Acc: {}’.format(
trainer.previous_minibatch_loss_average,
trainer.previous_minibatch_evaluation_average))
Mengukur kinerja NN
Untuk mengoptimalkan model NN kami, setiap kali kami meneruskan data melalui pelatih, ini mengukur kinerja model melalui metrik yang kami konfigurasikan untuk pelatih. Pengukuran performansi model NN selama pelatihan dilakukan pada data pelatihan. Namun di sisi lain, untuk analisis lengkap performa model, kami juga perlu menggunakan data pengujian.
Jadi, untuk mengukur kinerja model menggunakan data uji, kita dapat memanggil test_minibatch metode di trainer sebagai berikut -
trainer.test_minibatch({ features: X_test, label: y_test})
Membuat prediksi dengan NN
Setelah Anda melatih model deep learning, hal terpenting adalah membuat prediksi menggunakan model tersebut. Untuk membuat prediksi dari NN terlatih di atas, kita dapat mengikuti langkah-langkah yang diberikan-
Step 1 - Pertama, kita perlu memilih item acak dari set pengujian menggunakan fungsi berikut -
np.random.choice
Step 2 - Selanjutnya, kita perlu memilih data sampel dari set pengujian dengan menggunakan sample_index.
Step 3 - Sekarang, untuk mengubah keluaran numerik ke NN menjadi label sebenarnya, buat pemetaan terbalik.
Step 4 - Sekarang, gunakan yang dipilih sampledata. Buat prediksi dengan memanggil NN z sebagai fungsi.
Step 5- Sekarang, setelah Anda mendapatkan output yang diprediksi, ambil indeks neuron yang memiliki nilai tertinggi sebagai nilai prediksi. Itu bisa dilakukan dengan menggunakannp.argmax fungsi dari numpy paket.
Step 6 - Terakhir, ubah nilai indeks menjadi label sebenarnya dengan menggunakan inverted_mapping.
Membuat prediksi dengan NN - Contoh lengkap
sample_index = np.random.choice(X_test.shape[0])
sample = X_test[sample_index]
inverted_mapping = {
1:’Iris-setosa’,
2:’Iris-versicolor’,
3:’Iris-virginica’
}
prediction = z(sample)
predicted_label = inverted_mapping[np.argmax(prediction)]
print(predicted_label)
Keluaran
Setelah melatih model deep learning di atas dan menjalankannya, Anda akan mendapatkan output berikut -
Iris-versicolor