2-bo‘lim

Muhitni sozlash va birinchi tenzor

Virtual muhit yaratish, PyTorch ni o'rnatish, o'rnatishni tekshirish va birinchi tenzor bilan tanishish.

🕑 9 daqiqa o‘qish 📄 685 so‘z 👁 0 marta ko‘rilgan
Ushbu bo‘lim mundarijasi
  1. Ikki yo'l
  2. Virtual muhit
  3. O'rnatish
  4. Tekshirish
  5. Tenzor nima
  6. Tenzor yaratish
  7. Takrorlanadigan natija
  8. Muhitni tark etish
  9. Xulosa

PyTorch ni o'rnatish uchun GPU ham, kuchli kompyuter ham shart emas. Oddiy noutbuk va Python yetarli.

Ikki yo'l #

Yo'lKimga mosIzoh
O'z kompyuteringizdaKundalik ishBir marta o'rnatiladi, internet keyin kerak emas
Google ColabGPU kerak bo'lgandaBrauzerda 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:

Terminal
python3 -m venv torchenv
source torchenv/bin/activate

Windows'da faollashtirish boshqacha:

CMD
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):

Terminal
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
Nima uchun maxsus manzil

--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:

Python
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)
Terminal
python tekshir.py
Natija
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:

Tenzor - o'lchovlar soni bilan farq qiladi 0 o'lchov 7 skalyar shape: () 1 o'lchov 1 2 3 4 vektor shape: (4,) 2 o'lchov matritsa, jadval shape: (2, 4) 3+ o'lchov rasm: (3, 224, 224) Rangli rasm - uch o'lchovli tenzor: kanal, balandlik, kenglik Bir paket rasm esa to'rt o'lchovli: (paket, kanal, balandlik, kenglik)
Tenzor - NumPy massivining PyTorch dagi ko'rinishi, ustiga ikkita qobiliyat qo'shilgan

Tenzorni NumPy massividan ajratib turadigan ikki narsa bor va ikkalasi ham keyingi bo'limlarda ochiladi:

QobiliyatNima beradiQaysi bo'limda
Avtomatik differensiallashHosilalarni o'zi hisoblaydi4-bo'lim
Qurilma tanlashGPU da ishlay oladi9-bo'lim

Tenzor yaratish #

Python
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))
Natija
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)
FunksiyaNima 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
Tur (dtype) e'tibordan chetda qolmasin

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:

Natija
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.

Python
torch.manual_seed(42)

Tajriba qilayotganda bu juda muhim: modelni ikki marta o'qitib, natijani solishtirmoqchi bo'lsangiz, tasodifiylik bir xil bo'lishi kerak.

Natijangiz baribir biroz farq qilishi mumkin

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 #

Terminal
deactivate

Keyingi safar ishni davom ettirish uchun faqat faollashtirish kifoya - qaytadan o'rnatish shart emas.

Amaliy topshiriq
  1. torchenv nomli virtual muhit yarating va uni faollashtiring.
  2. PyTorch ning CPU versiyasini o'rnating.
  3. tekshir.py ni ishga tushirib, versiyani yozib oling.
  4. torch.cuda.is_available() nima qaytardi? Nega shunday?
  5. zeros, ones, arange va rand bilan to'rtta tenzor yarating.
  6. Har birining shape va dtype ini chiqaring.
  7. torch.manual_seed(42) ni olib tashlab, dasturni ikki marta ishga tushiring va farqni ko'ring.
  8. NumPy massividan tenzor yasang va uning turini tekshiring.
  9. Butun sonli tenzorni .float() bilan o'zgartiring va turini qayta chiqaring.
  10. torch.randn(3, 3) yasang - uning qiymatlari torch.rand dan 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/cpu ishlatiladi.
  • Oddiy pip install torch GPU kutubxonalarini ham tortadi - bir necha gigabayt.
  • torch.cuda.is_available() False qaytarishi 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 float32 bilan ishlaydi; int64 tenzor RuntimeError beradi.
  • 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.

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.