Keras kutubxonasidan foydalangan holda sun'iy neyron tarmog'ini amalga oshirish va o'qitish
Ushbu tarmoqni amalga oshirish uchun Anaconda Prompt buyruq satrini ishlatish kerak. Keyin buyruqlarni kiritib, kerakli tarkibiy qismlarni kutubxonaga import qiling. Birinchidan, Python dasturlash tili - NumPy-da ko'p o'lchovli qatorlar bilan samarali ishlash uchun modulni import qilishingiz kerak. NumPy sizga n-o'lchovli massivlar bilan ishlashga imkon beradi, murakkab funktsiyalarga ega, C / C ++ va FORTRAN dasturlash tillari bilan birlashtirish mumkin. NumPy-ni Keras-ga kiritish uchun quyidagi buyruqdan foydalanish kerak:
import numpy
Keyinchalik, Keras kutubxonasining qolgan qismlarini import qilishingiz kerak: MNIST ma'lumotlar to'plami, Sequential model - qatlamlari bir-biriga ulangan neyron tarmoq; Zich neyron tarmog'ida ishlatiladigan qatlamlar turini (oldingi darajadagi barcha neyronlar keyingi darajadagi barcha neyronlar bilan bog'langan) va qatorlar bilan ishlash uchun maxsus yordamchi vositalarni aniqlaydigan model. Buning uchun quyidagi buyruqlar guruhini bajaring:
from keras.datasets import mnist from keras.models import Sequential from keras.models import Dense from keras.utlis import np_utlis
Barcha kerakli tarkibiy qismlarni olib kirgandan so'ng, natijalarni takrorlash uchun urug'ni sozlash
kerak (Python buyrug'i tasodifiy sonlar generatorini ishga tushirishni anglatadi):
numpy.random.seed(42)
Keras kutubxonasi mashina o'rganish algoritmlari uchun ma'lumotlar to'plamlarini yuklash uchun turli xil usullarni taqdim etadi. Ikki o'quv ma'lumotlar to'plamini yuklash uchun buyruqni bajaring:
(X_train, y_train) = mnist.load_data()
X_train - o'quv jarayonida ishlatiladigan va sun'iy neyron tarmog'i tomonidan tan olinishi kerak bo'lgan tasvirlar bilan ma'lumotlar, y_train - har bir rasm uchun to'g'ri javoblar.
Neyron tarmog'ini to'g'ridan-to'g'ri o'rgatishdan oldin, ma'lumotlarni oldindan qayta ishlashni amalga oshirish kerak, ya'ni rasmlarning o'lchamlarini o'zgartirish (kirish qatori), buning uchun siz buyruqni bajarishingiz kerak.:
X_train = X_train.reshape(60000, 784)
Ushbu buyruq 784 pikselli bitta o'lchovli massivga qadoqlangan 60 000 rasm mavjudligini anglatadi.
Keyin, ta'lim samaradorligini oshirish uchun ma'lumotlarni normallashtirishni boshlash kerak, buning uchun buyruq bajariladi:
X_train = X-train.astype(‘float32’)
X_train /= 255
Buyruqni kiritgandan so'ng, har bir pikselning intensivligi 0 dan 255 gacha bo'ladi.
Keyingi qadam teglarni 10 elementlar qatoriga bo'lish uchun aylantirishdir, bu erda barcha
elementlar 0 bo'ladi, bitta to'g'ri javobni bildiradigan elementlardan tashqari:
y_train = np_utils.to_categorical(y_train, 10)
Chiqishda neyron tarmoq rasmda ishlatiladigan bitta raqamni emas, balki tasvir sinflariga mos keladigan 10 chiqish signalini berishi kerak:
# 0 -> [1, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 1 -> [0, 1, 0, 0, 0, 0, 0, 0, 0, 0] …
# 9 -> [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
To'g'ri javob 10 element qatoriga aylantiriladi, unda berilgan to'g'ri javobga mos keladigan element 1 ga o'rnatiladi (9 raqami uchun - 10 element).
Neyron tarmog'i bilan ishlash uchun ma'lumotlarni tayyorlaganingizdan so'ng, siz uni yaratishni va o'qishni boshlashingiz mumkin. Neyron tarmoqni tasvirlash uchun Python ushbu modeldan foydalanadi:
Model = Sequential()
Ushbu ishda ketma-ket turdagi model qo'llaniladi, unda qatlamlar buyurtma qilinadi va bir-birining orqasidan boradi.
Modelga tarmoqning darajalarini (qatlamlarini) qo'shish kerak, buning uchun buyruqlar mavjud:
model.ad(Dense(800, input_dim=784,
|
activation=”relu”,
|
kernel_initializer=”normal”)) model.add(Dense(10, kernel_initializer=”normal”))
|
activation=”softmax”,
|
Ushbu buyruqlar neyron tarmog'ining ikki qatlami qo'shilganligini anglatadi, birinchi (kirish) qatlamida 800 neyron bor va ularning har birida 784 kirish mavjud (tan olingan rasmlardagi piksellar soni). Og'irliklar odatdagi taqsimot yordamida tasodifiy ishga tushiriladi. Rectifier faollashtirish funktsiyasi sifatida ishlatiladi.
Ikkinchi qavat 10 neyrondan iborat bo'lib, ularning kirish og'irliklari ham tasodifiy qiymatlar bilan normal taqsimlash yordamida ishga tushiriladi. Ikkinchi qatlam neyronlari uchun faollashtirish funktsiyasi - Softmax.
Ikkala qatlam ham zich turga kiradi, yuqorida aytib o'tilganidek, bu tur bir qavatning barcha neyronlarini boshqa qatlamning barcha neyronlar bilan bog'lanishini ta'minlaydi.
Sun'iy neyron tarmoqning modelini tavsiflagandan so'ng, uni tuzish kerak, buning uchun biz buyruqni kiritamiz:
model.compile(loss-“categorical_crossentropy”, metrics=[“accuracy”])
|
optimizer=”SGD”,
|
Kompilyatsiya paytida o'quv parametrlari o'rnatiladi, ushbu buyruq SGD o'qitish usulidan foydalanadi - stoxastik gradient tushirish usuli, Katolik Xoch Entropiyasi xato o'lchovi sifatida ishlatiladi, bu sizga 10 ta elementdan iborat massiv bilan ishlashga imkon beradi. Optimallashtirish aniqlik metrikasiga muvofiq amalga oshiriladi.
Modelni tuzgandan so'ng, siz uning qisqa xususiyatlarini ko'rsatishingiz mumkin, buning uchun biz buyruqdan foydalanamiz:
print(model.summary())
O'tkazilgan barcha bosqichlardan so'ng siz tarmoqni o'qitishga o'tishingiz mumkin. Trening fitnes usuli yordamida olib boriladi, ushbu usulda tarmoq o'rgatiladigan ma'lumotlarni (qo'l yozuvi bilan rasmlar), shuningdek har bir rasm uchun to'g'ri javoblarni ko'rsatish kerak:
model.fit(X-train, y_train, validation_split=0.2, verbose=2)
|
batch_size=200,
|
epochs=25,
|
Optimallashtirish uchun stokastik gradientni tushirish usuli qo'llaniladi, mini-namunaning o'lchami 200 elementdan iborat. 200 ta rasm tahlil qilinadi va gradientning yo'nalishi aniqlanadi, ushbu yo'nalishga muvofiq og'irlik qiymatlari o'zgartiriladi, so'ngra keyingi 200 ta rasm tahlil qilinadi va keyin og'irliklar gradient yo'nalishiga muvofiq yana o'zgartiriladi. Amaldagi o'quv uslubidagi davrlar soni o'quv siklining takroriy sonini ko'rsatadi. Bunday holda, davrlar soni 25 ga teng, ya'ni. neyron tarmog'i bir xil ma'lumotlar to'plamidan 25 marta o'qitiladi. Verbose parametr sizga mashg'ulot paytida diagnostika ma'lumotlarini ko'rsatishga imkon beradi.
Treningdan so'ng konsol davr ma'lumotlari, mashg'ulotlar vaqti va xatolar qiymati, shuningdek aniqlik parametrlarini o'z ichiga olgan o'quv ma'lumotlarini chiqarishi kerak.
Treningdan so'ng siz test ma'lumotlari yordamida neyron tarmoqning aniqligini baholashingiz mumkin. Buning uchun buyruqni bajaring:
scores = model.evaluate(X_test, Y_test, verbose=0) print(“Точность работы: %.2f%%” % (scores[1]*100))
Ushbu buyruqni bajargandan so'ng, konsol test ma'lumotlarini qayta ishlashga asoslangan neyron tarmoq ishlashi aniqligining raqamli qiymatini ko'rsatadi.
Shunday qilib, dasturiy vositalar va tayyor kutubxonalardan foydalanib, o'zingizning sun'iy neyron tarmog'ingizni tez va samarali ravishda yaratishingiz (parametrlarini belgilashingiz) va tayyor test ma'lumotlari asosida mashq qilishingiz mumkin.
Shuningdek, sun'iy neyron tarmoqlarini yaratish va o'qitishning yanada murakkab usuli mavjud, ya'ni dastur kodini mustaqil yozish va o'z ilmiy, xususan, matematik kutubxonalaringizni yaratish. Ushbu usul juda ko'p afzalliklarga ega, birinchidan, foydalanuvchi uchun dasturlash tillarining kengroq doirasi ochiq, ikkinchidan, foydalanuvchi o'zining neyron tarmog'ini yanada aniqroq sozlash bilan ishlashi mumkin, uchinchidan, neyron tarmoqlari juda ko'p ijodiy jarayon bo'lganida o'z-o'zini yozish uchun dasturiy ta'minot. , va foydalanuvchiga deyarli hech qanday cheklovlarsiz ishlashga imkon beradi. Ushbu usulning bitta kamchiliklari bor - murakkablik va mehnatsevarlik..
import matplotlib.pyplot as plt history = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=5)
# Soxaning o'qitilishi va tekshirishning aniqligi qiymatlari plt.plot(history.history['acc']) plt.plot(history.history['val_acc']) plt.title('Model accuracy') plt.ylabel('Accuracy') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper left') plt.show() plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('Model loss') plt.ylabel('Loss') plt.xlabel('Epoch') plt.legend(['Train', 'Test'], loc='upper left') plt.show()
from keras.layers import Dense, Conv2D, Flatten, MaxPooling2D model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(28, 28, 1))) model.add(MaxPooling2D()) model.add(Conv2D(128, kernel_size=3, activation='relu')) model.add(Flatten()) model.add(Dense(10, activation='softmax')) model.compile(optimizer='sgd', loss='mean_squared_error', metrics=['accuracy'])
history = model.fit(x_train, y_train, validation_data=(x_test, y_test), epochs=10)
'val_acc': [0.8221, 0.9609, 0.9733, 0.9756,
0.9797, 0.9809, 0.9821, 0.9828, 0.9836, 0.9841] Keras modelini bitta hdf5 faylida saqlash uchun model.save (filepath) dan foydalanishingiz mumkin, unda quyidagilar mavjud: modelni qayta yaratishga imkon beradigan model arxitekturasi
modellarning og’'irlik koefitsientlari
o'quv konfiguratsiyasi (yo'qotish, optimizator) mashg'ulotni to'xtagan joyingizda davom ettirishga imkon beradigan optimallashtiruvchi holat.
from keras.models import load_model model.save('my_model.h5') # 'my_model.h5' HDF5 faylini yaratish del model # Modelni o’chirish. # Modelni qayta yuklash model = load_model('my_model.h5') Agar siz TensorFlow yoki CNTK backends-da ishlayotgan bo'lsangiz, mavjud GPU aniqlanganda kodingiz avtomatik ravishda GPU-da ishlaydi.
tensorflow — Faqat protsessor uchun so'nggi barqaror versiya
tensorflow-gpu — GPU-quvvatlashi bilan so'nggi barqaror versiya (Ubuntu va
Windows)
Do'stlaringiz bilan baham: |