1-bo‘lim

PyTorch nima va u qayerdan paydo bo'ldi

Framework nima uchun kerak, PyTorch kim tomonidan va qanday sharoitda yaratilgani, dinamik graf g'oyasi va boshqa vositalar bilan farqi.

🕑 6 daqiqa o‘qish 📄 934 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Nima uchun framework kerak
  2. Torch - Lua davri
  3. PyTorch qanday tug'ildi
  4. Statik va dinamik graf
  5. Bugungi manzara
  6. Darslikda nima quramiz
  7. Nima bilish kerak
  8. Xulosa

Oldingi darslikda siz neyron tarmoqni NumPy bilan noldan yozdingiz: oldinga tarqalish, yo'qotish funksiyasi, hosilalar va orqaga tarqalish - hammasi qo'lda. Bu eng yaxshi o'rganish usuli. Lekin haqiqiy loyihada hech kim shunday ishlamaydi.

Nima uchun framework kerak #

Qo'lda yozilgan tarmoqda har bir yangi qatlam uchun ikkita ish qilasiz: oldinga hisoblashni yozasiz va uning hosilasini chiqarasiz. Uchta qatlam uchun bu bajariladigan ish. O'ttiz qatlam uchun esa - deyarli imkonsiz.

VazifaNumPy bilan qo'ldaPyTorch bilan
Yangi qatlam qo'shishOldinga + orqaga hisob yoziladiBitta qator
Hosilalarni topishQog'ozda chiqariladiloss.backward()
Optimizatorni almashtirishQaytadan yoziladiAdam o'rniga SGD
GPU da ishlatishDeyarli imkonsiz.to("cuda")
Tayyor modelni olishYo'qBir necha qator
Xatolikni topishHosilani qo'lda tekshirishOgohlantirish va xabarlar

Framework sizdan matematikani yashirmaydi - u faqat takrorlanadigan qismini o'z zimmasiga oladi. Shuning uchun avval noldan yozib ko'rish, keyin frameworkka o'tish to'g'ri tartib.

Torch - Lua davri #

Ronan Collobert - Torch kutubxonasining asosiy mualliflaridan

2010-yil atrofida. Shveytsariyaning Idiap tadqiqot institutida Ronan Collobert va hamkasblari Torch7 kutubxonasini yozdi. U kuchli edi, lekin bitta g'alati tomoni bor edi: u Lua tilida yozilardi.

Lua tez va yengil til, lekin ilmiy hisob-kitob dunyosida u begona edi - tadqiqotchilar Python va uning NumPy, SciPy, matplotlib ekotizimida ishlardi. Torch kuchli bo'lsa ham, uni ishlatish uchun butun boshqa tilni o'rganish kerak edi.

PyTorch qanday tug'ildi #

Soumith Chintala - PyTorch hammualliflaridan, Torch7 ning uzoq yillik ishtirokchisi

2015-2016-yillar. Soumith Chintala 2012-yildan beri Torch7 ustida ishlardi. U boshchiligidagi guruh Torch ning C dagi asosini Lua dan ajratish ustida ish boshladi - shunda uni boshqa tildan ham ishlatish mumkin bo'lardi.

O'sha paytda Adam Paszke degan talaba amaliyot izlab murojaat qildi. Unga taklif shunday bo'ldi: keling, Torch ning keyingi versiyasini zamonaviy dizayn bilan yozamiz.

2016-yil, sentabr. PyTorch chiqdi. Uning hammualliflari - Adam Paszke, Sam Gross, Soumith Chintala va Gregory Chanan.

Loyiha g'oyalarni bir necha manbadan oldi:

ManbaNima olindi
Torch7 (Lua)Tenzor kutubxonasi va C dagi asos
ChainerDefine-by-run - dinamik hisoblash grafi
HIPS AutogradAvtomatik differensiallash yondashuvi
NumPyTanish interfeys va Python ekotizimi

Statik va dinamik graf #

Bu PyTorch ning eng muhim qarori edi va u butun sohani o'zgartirdi.

Statik graf (eski TensorFlow) Dinamik graf (PyTorch) 1. Butun grafni oldin tasvirlaysiz 2. Sessiya ochib, uni ishga tushirasiz 3. Xato bo'lsa - graf ichida, tushunarsiz print() ishlamaydi, debugger foydasiz 1. Kod oddiy Python kabi ishlaydi 2. Graf hisoblash paytida quriladi 3. Xato odatdagi joyda, odatdagi xabar bilan print() va debugger ishlaydi Shuning uchun tadqiqotchilar PyTorch ga o'tdi - tajriba qilish tezlashdi
Define-by-run: graf oldindan emas, kod ishlayotganda quriladi

Amalda bu shuni bildiradi: PyTorch kodi ichida print() yozsangiz - u ishlaydi. if yozsangiz - u har chaqiruvda boshqacha yo'l tanlashi mumkin. Xato chiqsa - Python ning odatdagi xato izini ko'rasiz.

Bugun bu farq kichrayib qoldi

TensorFlow 2.0 (2019) dan keyin u ham sukut bo'yicha dinamik rejimda ishlaydi, PyTorch esa torch.compile bilan statik optimallashtirishni taklif qiladi.

Ya'ni ikkala vosita bir-biriga yaqinlashdi. Lekin 2016-2019 yillardagi bu farq PyTorch ni tadqiqot dunyosida yetakchi qildi va o'sha ustunlik bugun ham saqlanib qolgan.

Bugungi manzara #

VositaKim ishlatadiIzoh
PyTorchTadqiqot va ishlab chiqarishMaqolalar va ochiq modellarning katta qismi
TensorFlow / KerasKo'proq korxonalarMobil va ishlab chiqarish vositalari kuchli
JAXTadqiqot, katta modellarFunksional uslub, tez, lekin murakkabroq
scikit-learnKlassik MLNeyron tarmoq uchun emas - oldingi darslikda

Ochiq modellar (Hugging Face) va ilmiy maqolalar kodi ko'pincha aynan PyTorch da yoziladi - shuning uchun uni bilish boshqa odamlarning ishini o'qish imkonini beradi.

Darslikda nima quramiz #

Yigirma bo'limdagi yo'l Tenzorlar 1-4 bo'lim O'qitish sikli 5-12 bo'lim CNN va rasmlar 13-16 bo'lim Chiqarish 17-20 bo'lim Har bo'limdagi kod haqiqatda ishga tushirilgan Natijalar - CPU da olingan; tasodifiy sonlar tufayli sizniki biroz farq qilishi mumkin
Tenzordan boshlab, o'z ma'lumotingizda o'qitilgan modelgacha

Nima bilish kerak #

TalabIzoh
Python asoslariFunksiya, sinf, sikl - Python darsligi
NumPyMassiv va shakl (shape) tushunchasi
Neyron tarmoq mohiyatiNeyron tarmoqlar noldan
Hosila haqida tasavvurFormulani chiqarish shart emas
GPUShart emas - hamma misol oddiy protsessorda ishlaydi
GPU bo'lmasa ham davom eting

Darslikdagi barcha misollar oddiy noutbukda, protsessorda ishlaydi. GPU faqat 9-bo'limda alohida mavzu sifatida ko'riladi.

Katta modelni o'qitmoqchi bo'lsangiz, Google Colab bepul GPU beradi - bu haqda ham o'sha bo'limda gaplashamiz.

Amaliy topshiriq
  1. Framework nima uchun kerakligini uchta sabab bilan yozing.
  2. Torch nima uchun Lua da yozilgani va bu qanday muammo tug'dirganini tushuntiring.
  3. PyTorch qaysi yilda va kimlar tomonidan chiqarilganini yozib oling.
  4. Statik va dinamik grafning farqini o'z so'zingiz bilan ayting.
  5. Dinamik graf disk raskotni qanday osonlashtirishini bitta misol bilan ko'rsating.
  6. PyTorch, TensorFlow va JAX ni uchta mezon bo'yicha jadvalga soling.
  7. Hugging Face saytiga kirib, sevimli mavzuingizdagi bitta modelni toping.
  8. O'sha modelning kodi qaysi frameworkda yozilganini aniqlang.
  9. Oldingi darslikda o'zingiz yozgan tarmoqni eslang: unda qaysi qism eng ko'p vaqt olgan?
  10. Shu darslik oxirida qanday model qurmoqchi ekaningizni bir jumlada yozing.

Xulosa #

  • Framework matematikani yashirmaydi - u takrorlanadigan qismni o'z zimmasiga oladi.
  • Qo'lda yozilgan tarmoqda har yangi qatlam uchun hosilani ham yozish kerak; frameworkda yo'q.
  • Torch7 (2010 atrofida, Idiap, Ronan Collobert va boshqalar) Lua tilida yozilgan edi.
  • Lua ilmiy hisob dunyosida begona edi - Python ekotizimi kuchliroq bo'lgan.
  • PyTorch 2016-yil sentabrda chiqdi; hammualliflari: Adam Paszke, Sam Gross, Soumith Chintala, Gregory Chanan.
  • G'oyalar Torch7, Chainer (define-by-run), HIPS Autograd va NumPy dan olingan.
  • Dinamik graf: hisoblash grafi kod ishlayotganda quriladi, shuning uchun print() va debugger ishlaydi.
  • Bugun TensorFlow ham dinamik rejimda ishlaydi - farq kichraygan, lekin PyTorch tadqiqotda yetakchi bo'lib qoldi.
  • Ochiq modellar va maqolalar kodi ko'pincha PyTorch da - bu boshqalarning ishini o'qish imkonini beradi.
  • Darslikdagi hamma narsa oddiy protsessorda ishlaydi; GPU majburiy emas.

Keyingi bo'limda muhitni sozlaymiz va birinchi tenzorni yaratamiz.

Xatolik topdingizmi?

Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.