2-bo‘lim
Muhitni sozlash va birinchi tenzor
Virtual muhit yaratish, PyTorch ni o'rnatish, o'rnatishni tekshirish va birinchi tenzor bilan tanishish.
Ushbu bo‘lim mundarijasi
PyTorch ni o'rnatish uchun GPU ham, kuchli kompyuter ham shart emas. Oddiy noutbuk va Python yetarli.
Ikki yo'l #
| Yo'l | Kimga mos | Izoh |
|---|---|---|
| O'z kompyuteringizda | Kundalik ish | Bir marta o'rnatiladi, internet keyin kerak emas |
| Google Colab | GPU kerak bo'lganda | Brauzerda ishlaydi, o'rnatish shart emas |
Darslikdagi hamma narsa birinchi yo'l bilan ishlaydi. Colab ga 9-bo'limda qaytamiz.
Virtual muhit #
PyTorch katta kutubxona. Uni tizim bo'ylab emas, alohida muhitga o'rnatish to'g'riroq - shunda boshqa loyihalaringizga tegmaydi:
python3 -m venv torchenv
source torchenv/bin/activate
Windows'da faollashtirish boshqacha:
python -m venv torchenv
torchenv\Scripts\activate
Faollashtirilgach, buyruq satri oldida muhit nomi paydo bo'ladi.
O'rnatish #
Protsessorda ishlaydigan versiya (barcha misollar uchun yetarli):
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
--index-url PyTorch ning o'z omboriga ishora qiladi. Oddiy
pip install torch ham ishlaydi, lekin u NVIDIA kutubxonalari bilan
birga bir necha gigabaytlik paketni tortadi - GPU bo'lmasa, bu behuda.
CPU versiyasi ancha yengil va darslikdagi hamma narsani bajaradi.
NVIDIA video kartangiz bo'lsa, pytorch.org sahifasidagi tanlagich kerakli buyruqni beradi - unda CUDA versiyasini ham ko'rsatasiz.
Tekshirish #
tekshir.py faylini yarating:
import torch
print("PyTorch versiyasi:", torch.__version__)
print("GPU mavjudmi: ", torch.cuda.is_available())
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
print(x)
print("shakl:", x.shape, "| tur:", x.dtype, "| qurilma:", x.device)
python tekshir.py
PyTorch versiyasi: 2.14.0+cpu
GPU mavjudmi: False
tensor([[1., 2.],
[3., 4.]])
shakl: torch.Size([2, 2]) | tur: torch.float32 | qurilma: cpu
GPU mavjudmi: False - bu xato emas. Darslikdagi barcha misollar
cpu qurilmasida ishlaydi.
Tenzor nima #
Tenzor - bu ko'p o'lchovli massiv. NumPy massivini bilsangiz, siz tenzorni ham bilasiz:
Tenzorni NumPy massividan ajratib turadigan ikki narsa bor va ikkalasi ham keyingi bo'limlarda ochiladi:
| Qobiliyat | Nima beradi | Qaysi bo'limda |
|---|---|---|
| Avtomatik differensiallash | Hosilalarni o'zi hisoblaydi | 4-bo'lim |
| Qurilma tanlash | GPU da ishlay oladi | 9-bo'lim |
Tenzor yaratish #
import torch
import numpy as np
a = torch.zeros(2, 3)
b = torch.ones(2, 3)
c = torch.arange(6).reshape(2, 3)
torch.manual_seed(42)
d = torch.rand(2, 3)
print("zeros:\n", a)
print("arange+reshape:\n", c)
print("rand (seed 42):\n", d)
n = np.array([[1, 2], [3, 4]])
t = torch.from_numpy(n)
print("numpy dan:", t, t.dtype)
t2 = torch.tensor([1.5, 2.5])
print("float32:", t2.dtype, "| int ga:", t2.to(torch.int32))
zeros:
tensor([[0., 0., 0.],
[0., 0., 0.]])
arange+reshape:
tensor([[0, 1, 2],
[3, 4, 5]])
rand (seed 42):
tensor([[0.8823, 0.9150, 0.3829],
[0.9593, 0.3904, 0.6009]])
numpy dan: tensor([[1, 2],
[3, 4]]) torch.int64
float32: torch.float32 | int ga: tensor([1, 2], dtype=torch.int32)
| Funksiya | Nima qiladi |
|---|---|
torch.zeros(2, 3) | Nollardan iborat tenzor |
torch.ones(2, 3) | Birlardan iborat |
torch.arange(6) | 0 dan 5 gacha ketma-ketlik |
torch.rand(2, 3) | [0, 1) oralig'ida tasodifiy |
torch.randn(2, 3) | Normal taqsimot bo'yicha tasodifiy |
torch.tensor([...]) | Tayyor ro'yxatdan |
torch.from_numpy(n) | NumPy massividan |
Yuqoridagi natijaga qarang: torch.tensor([1.5, 2.5]) - float32, lekin
torch.from_numpy(np.array([[1, 2]])) - int64.
Neyron tarmoqlar deyarli har doim float32 bilan ishlaydi. Butun
sonli tenzorni modelga bersangiz, shunday xato chiqadi:
RuntimeError: expected scalar type Float but found Long
Yechim oddiy: .float() yoki .to(torch.float32).
Takrorlanadigan natija #
Yuqorida torch.manual_seed(42) yozilgani bejiz emas. Usiz torch.rand
har safar boshqa sonlar beradi va sizning natijangiz darslikdagidan farq
qiladi.
torch.manual_seed(42)
Tajriba qilayotganda bu juda muhim: modelni ikki marta o'qitib, natijani solishtirmoqchi bo'lsangiz, tasodifiylik bir xil bo'lishi kerak.
Bir xil urug' (seed) bir xil mashinada bir xil natija beradi. Lekin boshqa PyTorch versiyasi, boshqa protsessor yoki GPU da oxirgi raqamlar farq qilishi mumkin.
Darslikdagi sonlar PyTorch 2.14 da, protsessorda olingan. Sizda
0.8823 o'rniga 0.8824 chiqsa - bu xato emas.
Muhitni tark etish #
deactivate
Keyingi safar ishni davom ettirish uchun faqat faollashtirish kifoya - qaytadan o'rnatish shart emas.
torchenvnomli virtual muhit yarating va uni faollashtiring.- PyTorch ning CPU versiyasini o'rnating.
tekshir.pyni ishga tushirib, versiyani yozib oling.torch.cuda.is_available()nima qaytardi? Nega shunday?zeros,ones,arangevarandbilan to'rtta tenzor yarating.- Har birining
shapevadtypeini chiqaring. torch.manual_seed(42)ni olib tashlab, dasturni ikki marta ishga tushiring va farqni ko'ring.- NumPy massividan tenzor yasang va uning turini tekshiring.
- Butun sonli tenzorni
.float()bilan o'zgartiring va turini qayta chiqaring. torch.randn(3, 3)yasang - uning qiymatlaritorch.randdan nimasi bilan farq qiladi?
Xulosa #
- PyTorch ni alohida virtual muhitga o'rnating - tizim paketlariga tegmaydi.
- CPU versiyasi uchun
--index-url https://download.pytorch.org/whl/cpuishlatiladi. - Oddiy
pip install torchGPU kutubxonalarini ham tortadi - bir necha gigabayt. torch.cuda.is_available()Falseqaytarishi xato emas - hamma misol CPU da ishlaydi.- Tenzor - ko'p o'lchovli massiv, NumPy massiviga juda o'xshash.
- Tenzorni ajratib turadigan ikki narsa: avtomatik hosila va qurilma tanlash.
- Rangli rasm - uch o'lchovli tenzor
(kanal, balandlik, kenglik), paket esa to'rt o'lchovli. - Neyron tarmoqlar
float32bilan ishlaydi;int64tenzorRuntimeErrorberadi. torch.manual_seed()natijani takrorlanadigan qiladi - tajribalar uchun majburiy.- Bir xil urug' boshqa versiya yoki qurilmada oxirgi raqamlarda farq berishi mumkin.
Keyingi bo'limda tenzorlar ustidagi amallar va shakl bilan ishlashni o'rganamiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
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.