Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΡ Π²Π°ΠΌ ΡΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΠ΄Π΅ΡΠΈΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ Π·Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅ Π·Π° 30 ΠΌΠΈΠ½ΡΡΠ°, ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ°, Π° Π·Π°ΡΠΈΠΌ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΈΡΡΡ ΠΌΡΠ΅ΠΆΡ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡ (ΠΠΠ£).
ΠΡΠ²ΠΎ, Ρ Π°ΡΠ΄Π΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΠΌΠΎ ΡΡΠ° ΡΠ΅ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ°.
Π£ Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΎΠ²ΠΎ ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠΊΠΈ ΠΌΠΎΠ΄Π΅Π», ΠΊΠ°ΠΎ ΠΈ ΡΠ΅Π³ΠΎΠ²ΠΎ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΎ ΠΈΠ»ΠΈ Ρ Π°ΡΠ΄Π²Π΅ΡΡΠΊΠΎ ΠΎΠ»ΠΈΡΠ΅ΡΠ΅, ΠΈΠ·Π³ΡΠ°ΡΠ΅Π½ΠΎ Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ° Π±ΠΈΠΎΠ»ΠΎΡΠΊΠΈΡ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠΈΡ ΠΌΡΠ΅ΠΆΠ° - ΠΌΡΠ΅ΠΆΠ° Π½Π΅ΡΠ²Π½ΠΈΡ ΡΠ΅Π»ΠΈΡΠ° ΠΆΠΈΠ²ΠΎΠ³ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΌΠ°. ΠΠ²Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡ ΡΠ΅ Π½Π°ΡΡΠ°ΠΎ ΡΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΡΠ°Π²Π°ΡΠ° ΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ Π΄Π΅ΡΠ°Π²Π°ΡΡ Ρ ΠΌΠΎΠ·Π³Ρ ΠΈ ΠΏΠΎΠΊΡΡΠ°ΡΠ° Π΄Π° ΡΠ΅ ΡΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°ΡΡ.
ΠΠ΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅ Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½ΠΎΠΌ ΡΠΌΠΈΡΠ»Ρ ΡΠ΅ ΡΠ΅ΡΠΈ, ΠΎΠ½Π΅ ΡΡ ΠΎΠ±ΡΡΠ΅Π½Π΅. Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ ΡΡΠ΅ΡΠ° ΡΠ΅ ΡΠ΅Π΄Π½Π° ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΡ ΠΏΡΠ΅Π΄Π½ΠΎΡΡΠΈ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠΈΡ ΠΌΡΠ΅ΠΆΠ° Ρ ΠΎΠ΄Π½ΠΎΡΡ Π½Π° ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅. Π’Π΅Ρ Π½ΠΈΡΠΊΠΈ, ΡΡΠ΅ΡΠ΅ ΡΠ΅ ΡΠ°ΡΡΠΎΡΠΈ ΠΎΠ΄ ΠΏΡΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡΠ° ΠΊΠΎΠ΅ΡΠΈΡΠΈΡΠ΅Π½Π°ΡΠ° Π²Π΅Π·Π° ΠΈΠ·ΠΌΠ΅ΡΡ Π½Π΅ΡΡΠΎΠ½Π°. Π’ΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΎΠ±ΡΠΊΠ΅, Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ° ΡΠ΅ Ρ ΡΡΠ°ΡΡ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½Π΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ»Π°Π·Π½ΠΈΡ ΠΈ ΠΈΠ·Π»Π°Π·Π½ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΎ ΠΈ Π΄Π° ΠΈΠ·Π²ΡΡΠΈ Π³Π΅Π½Π΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ.
Π‘Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΠ° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎΠ³ ΡΡΠ΅ΡΠ°, Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ° ΡΠ΅ ΠΏΠΎΡΠ΅Π±Π°Π½ ΡΠ»ΡΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ° ΠΎΠ±ΡΠ°Π·Π°ΡΠ°, Π΄ΠΈΡΠΊΡΠΈΠΌΠΈΠ½Π°Π½ΡΠ½Π΅ Π°Π½Π°Π»ΠΈΠ·Π΅, ΠΌΠ΅ΡΠΎΠ΄Π° Π³ΡΡΠΏΠΈΡΠ°ΡΠ° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠ²ΠΎ, ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΌΠΎ ΠΎΠΏΡΠ΅ΠΌΡ. ΠΠΎΡΡΠ΅Π±Π°Π½ Π½Π°ΠΌ ΡΠ΅ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΠΌ ΠΠΈΠ½ΡΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠΎΠΌ. ΠΠΏΡΠ΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π½Π° Π·Π° ΡΠ°Π΄ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎΠ³ ΡΡΠ΅ΡΠ° ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΌΠΎΡΠ½Π° ΠΈ, ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΡΠΊΡΠΏΠ°. ΠΠ° ΠΎΠ½Π΅ ΠΊΠΎΡΠΈ Π½Π΅ΠΌΠ°ΡΡ Π΄ΠΎΠ±ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΏΡΠΈ ΡΡΡΠΈ, ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅ΠΌ Π΄Π° ΠΎΠ±ΡΠ°ΡΠ΅ ΠΏΠ°ΠΆΡΡ Π½Π° ΠΏΠΎΠ½ΡΠ΄Π΅ ΠΊΠ»Π°ΡΠ΄ ΠΏΡΠΎΠ²Π°ΡΠ΄Π΅ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π±ΡΠ·ΠΎ ΠΈΠ·Π½Π°ΡΠΌΠΈΡΠΈ ΡΡΠ°ΠΆΠ΅Π½ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΏΠ»Π°ΡΠΈΡΠΈ ΡΠ°ΠΌΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ°.
Π£ ΠΏΡΠΎΡΠ΅ΠΊΡΠΈΠΌΠ° Π³Π΄Π΅ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΠ³ ΠΎΠ΄ ΡΡΡΠΊΠΈΡ
ΠΏΡΠΎΠ²Π°ΡΠ΄Π΅ΡΠ° ΠΎΠ±Π»Π°ΠΊΠ°. ΠΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° Π½ΡΠ΄ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ ΠΎΠ±Π»Π°ΠΊΡ Π·Π° ΠΈΠ·Π½Π°ΡΠΌΡΠΈΠ²Π°ΡΠ΅ ΠΏΠΎΡΠ΅Π±Π½ΠΎ Π·Π° ΠΌΠ°ΡΠΈΠ½ΡΠΊΠΎ ΡΡΠ΅ΡΠ΅ ΡΠ° ΠΌΠΎΡΠ½ΠΈΠΌ Π’Π΅ΡΠ»Π° Π100 Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΠΌΠ° (ΠΠΠ£) ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ΅ ΠΠΠΠΠΠ. Π£ΠΊΡΠ°ΡΠΊΠΎ: ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ° ΠΠΠ£-ΠΎΠΌ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ Π΄Π΅ΡΠ΅ΡΠΈΠ½Π΅ ΠΏΡΡΠ° Π΅ΡΠΈΠΊΠ°ΡΠ½ΠΈΡΠ΅ (Π±ΡΠΆΠ΅) Ρ ΠΏΠΎΡΠ΅ΡΠ΅ΡΡ ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ»ΠΈΡΠ½Π΅ ΡΠ΅Π½Π΅ ΠΊΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π¦ΠΠ£ (ΠΏΠΎΠ·Π½Π°ΡΡ ΡΠ΅Π½ΡΡΠ°Π»Π½Ρ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΠΊΡ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ) Π·Π° ΠΏΡΠΎΡΠ°ΡΡΠ½Π΅. ΠΠ²ΠΎ ΡΠ΅ ΠΏΠΎΡΡΠΈΠΆΠ΅ Π·Π°Ρ
Π²Π°ΡΡΡΡΡΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌΠ° ΠΠΠ£ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ΅, ΠΊΠΎΡΠ° ΡΠ΅ Π±ΡΠΆΠ΅ Π½ΠΎΡΠΈ ΡΠ° ΠΏΡΠΎΡΠ°ΡΡΠ½ΠΈΠΌΠ°.
ΠΠ° Π±ΠΈΡΠΌΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π»ΠΈ Π΄ΠΎΠ»Π΅ ΠΎΠΏΠΈΡΠ°Π½Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΡΠΏΠΈΠ»ΠΈ ΡΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π΄Π°Π½Π°:
- Π‘Π‘Π Π΄ΠΈΡΠΊ 150 ΠΠ
- Π ΠΠ 32 ΠΠ
- Π’Π΅ΡΠ»Π° Π100 16 ΠΠ± ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΡΠ° 4 ΡΠ΅Π·Π³ΡΠ°
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ ΡΠΌΠΎ Π£Π±ΡΠ½ΡΡ 18.04 Π½Π° Π½Π°ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ.
ΠΠΎΡΡΠ°Π²ΡΠ°ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ°
Π‘Π°Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠΌΠΎ ΡΠ²Π΅ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ Π·Π° ΡΠ°Π΄ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠΎΡΡΠΎ ΡΠ΅ Π½Π°Ρ ΡΠ»Π°Π½Π°ΠΊ ΠΏΡΠ²Π΅Π½ΡΡΠ²Π΅Π½ΠΎ Π·Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΠΊΠ΅, Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ Π½Π΅ΠΊΠΈΠΌ ΡΠ°ΡΠΊΠ°ΠΌΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΈΠΌ Π±ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΠ½Π΅.
ΠΠ΅Π»ΠΈΠΊΠΈ Π΄Π΅ΠΎ ΠΏΠΎΡΠ»Π° ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΎΠΊΡΡΠΆΠ΅ΡΠ° ΠΎΠ±Π°Π²ΡΠ° ΡΠ΅ ΠΏΡΠ΅ΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ Π»ΠΈΠ½ΠΈΡΠ΅. ΠΠ΅ΡΠΈΠ½Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΠΠΈΠ½Π΄ΠΎΠ²Ρ ΠΊΠ°ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΠΠ‘. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π° Ρ ΠΎΠ²ΠΎΠΌ ΠΠ‘-Ρ ΠΎΡΡΠ°Π²ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΠΆΠ΅Π»ΠΈ. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π·Π³ΠΎΠ΄Π°Π½ Π°Π»Π°Ρ
ssh root@server-ip-or-hostname
Π£ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ-ΠΈΠΏ-ΠΎΡ-Ρ ΠΎΡΡΠ½Π°ΠΌΠ΅, Π½Π°Π²Π΅Π΄ΠΈΡΠ΅ ΠΠ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΠΠ‘ ΠΈΠΌΠ΅ Π²Π°ΡΠ΅Π³ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ°ΡΠΈΠΌ ΡΠ½Π΅ΡΠΈΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΡ ΠΈ Π°ΠΊΠΎ ΡΠ΅ Π²Π΅Π·Π° ΡΡΠΏΠ΅ΡΠ½Π°, ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ ΠΏΠΎΡΡΠΊΡ ΡΠ»ΠΈΡΠ½Ρ ΠΎΠ²ΠΎΡ.
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-74-generic x86_64)
ΠΠ»Π°Π²Π½ΠΈ ΡΠ΅Π·ΠΈΠΊ Π·Π° ΡΠ°Π·Π²ΠΎΡ ΠΠ ΠΌΠΎΠ΄Π΅Π»Π° ΡΠ΅ ΠΠΈΡΡ
ΠΎΠ½. Π Π½Π°ΡΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΡΠ΅Π³ΠΎΠ²Ρ ΡΠΏΠΎΡΡΠ΅Π±Ρ Π½Π° ΠΠΈΠ½ΡΠΊΡ ΡΠ΅
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π³Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠΎ Π½Π° Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠΎΡΠΈΡΠ΅ΠΌΠΎ Π°ΠΆΡΡΠΈΡΠ°ΡΠ΅ΠΌ Π»ΠΎΠΊΠ°Π»Π½ΠΎΠ³ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠ°:
sudo apt-get update
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΡΠ΅ ΡΡΡΠ» (ΡΡΠ»ΡΠΆΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π΅ Π»ΠΈΠ½ΠΈΡΠ΅):
sudo apt-get install curl
ΠΡΠ΅ΡΠ·ΠΌΠΈΡΠ΅ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΠ·ΠΈΡΡ ΠΠ½Π°ΡΠΎΠ½Π΄Π° ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΎΠ½:
cd /tmp
curl βO https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
ΠΠΎΡΠ½ΠΈΠΌΠΎ ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠΎΠΌ:
bash Anaconda3-2019.10-Linux-x86_64.sh
Π’ΠΎΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ΅, ΠΎΠ΄ Π²Π°Ρ ΡΠ΅ ΡΠ΅ ΡΡΠ°ΠΆΠΈΡΠΈ Π΄Π° ΠΏΠΎΡΠ²ΡΠ΄ΠΈΡΠ΅ ΡΠ³ΠΎΠ²ΠΎΡ ΠΎ Π»ΠΈΡΠ΅Π½ΡΠΈ. ΠΠ°ΠΊΠΎΠ½ ΡΡΠΏΠ΅ΡΠ½Π΅ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ΅ ΡΡΠ΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠ²ΠΎ:
Thank you for installing Anaconda3!
ΠΠ½ΠΎΠ³ΠΈ ΠΎΠΊΠ²ΠΈΡΠΈ ΡΡ ΡΠ°Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°Π½ΠΈ Π·Π° ΡΠ°Π·Π²ΠΎΡ ΠΠ ΠΌΠΎΠ΄Π΅Π»Π°; ΡΠ°Π΄ΠΈΠΌΠΎ ΡΠ° Π½Π°ΡΠΏΠΎΠΏΡΠ»Π°ΡΠ½ΠΈΡΠΈΠΌ:
ΠΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΠΎΠΊΠ²ΠΈΡΠ° Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΠΏΠΎΠ²Π΅ΡΠ°ΡΠ΅ Π±ΡΠ·ΠΈΠ½Ρ ΡΠ°Π·Π²ΠΎΡΠ° ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π³ΠΎΡΠΎΠ²Π΅ Π°Π»Π°ΡΠ΅ Π·Π° ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π΅ Π·Π°Π΄Π°ΡΠΊΠ΅.
Π£ ΠΎΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ΅ΠΌΠΎ ΡΠ°Π΄ΠΈΡΠΈ ΡΠ° ΠΠΈΠ’ΠΎΡΡΡ -ΠΎΠΌ. Π₯Π°ΡΠ΄Π΅ Π΄Π° Π³Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠΎ:
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
Π‘Π°Π΄Π° ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΠΡΠΏΠΈΡΠ΅Ρ ΠΠΎΡΠ΅Π±ΠΎΠΎΠΊ, ΠΏΠΎΠΏΡΠ»Π°ΡΠ°Π½ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ Π°Π»Π°Ρ Π·Π° ΡΡΡΡΡΡΠ°ΠΊΠ΅ Π·Π° ΠΠ. ΠΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ΄ΠΌΠ°Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎΠ²ΠΎΠ³ ΠΈΠ·Π²ΡΡΠ΅ΡΠ°. ΠΡΠΏΠΈΡΠ΅Ρ ΠΠΎΡΠ΅Π±ΠΎΠΎΠΊ ΡΠ΅ ΡΠΊΡΡΡΠ΅Π½ ΡΠ· ΠΠ½Π°ΡΠΎΠ½Π΄Π° ΠΈ Π²Π΅Ρ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠΎΡΠ°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ²Π΅ΠΆΠ΅ΡΠ΅ Π½Π° ΡΠ΅Π³Π° ΡΠ° Π½Π°ΡΠ΅Π³ Π΄Π΅ΡΠΊΡΠΎΠΏ ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠ° Π±ΠΈΡΠΌΠΎ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, ΠΏΡΠ²ΠΎ ΡΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡΠ΅Π½ΡΡΠΈ ΠΡΠΏΠΈΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΡ ΠΊΠΎΡΠΈ Π½Π°Π²ΠΎΠ΄ΠΈ ΠΏΠΎΡΡ 8080:
jupyter notebook --no-browser --port=8080 --allow-root
ΠΠ°ΡΠΈΠΌ, ΠΎΡΠ²Π°ΡΠ°ΡΡΡΠΈ ΡΠΎΡ ΡΠ΅Π΄Π½Ρ ΠΊΠ°ΡΡΠΈΡΡ Ρ Π½Π°ΡΠΎΡ Π¦ΠΌΠ΄Π΅Ρ ΠΊΠΎΠ½Π·ΠΎΠ»ΠΈ (Π³ΠΎΡΡΠΈ ΠΌΠ΅Π½ΠΈ - Π΄ΠΈΡΠ°Π»ΠΎΠ³ ΠΠΎΠ²Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°) ΠΌΠΈ ΡΠ΅ΠΌΠΎ ΡΠ΅ ΠΏΠΎΠ²Π΅Π·Π°ΡΠΈ ΠΏΡΠ΅ΠΊΠΎ ΠΏΠΎΡΡΠ° 8080 Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠ΅ΠΊΠΎ Π‘Π‘Π₯:
ssh -L 8080:localhost:8080 root@server-ip-or-hostname
ΠΠ°Π΄Π° ΡΠ½Π΅ΡΠ΅ΠΌΠΎ ΠΏΡΠ²Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π±ΠΈΡΠ΅ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡΠ΅Π½Π΅ Π²Π΅Π·Π΅ Π·Π° ΠΎΡΠ²Π°ΡΠ°ΡΠ΅ ΠΡΠΏΠΈΡΠ΅Ρ-Π° Ρ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΡ:
To access the notebook, open this file in a browser:
file:///root/.local/share/jupyter/runtime/nbserver-18788-open.html
Or copy and paste one of these URLs:
http://localhost:8080/?token=cca0bd0b30857821194b9018a5394a4ed2322236f116d311
or http://127.0.0.1:8080/?token=cca0bd0b30857821194b9018a5394a4ed2322236f116d311
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π²Π΅Π·Ρ Π·Π° Π»ΠΎΡΠ°Π»Ρ ΠΎΡΡ:8080. ΠΠΎΠΏΠΈΡΠ°ΡΡΠ΅ ΠΏΡΠ½Ρ ΠΏΡΡΠ°ΡΡ ΠΈ Π½Π°Π»Π΅ΠΏΠΈΡΠ΅ ΡΠ΅ Ρ Π°Π΄ΡΠ΅ΡΠ½Ρ ΡΡΠ°ΠΊΡ Π»ΠΎΠΊΠ°Π»Π½ΠΎΠ³ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΠ° Π²Π°ΡΠ΅Π³ ΡΠ°ΡΡΠ½Π°ΡΠ°. ΠΡΠΏΠΈΡΠ΅Ρ ΠΠΎΡΠ΅Π±ΠΎΠΎΠΊ ΡΠ΅ ΡΠ΅ ΠΎΡΠ²ΠΎΡΠΈΡΠΈ.
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ Π½ΠΎΠ²Ρ Π±Π΅Π»Π΅ΠΆΠ½ΠΈΡΡ: ΠΠΎΠ²ΠΎ - ΠΠ΅Π»Π΅ΠΆΠ½ΠΈΡΠ° - ΠΠΈΡΡ ΠΎΠ½ 3.
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ ΠΈΡΠΏΡΠ°Π²Π°Π½ ΡΠ°Π΄ ΡΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΊΠΎΡΠ΅ ΡΠΌΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΠ½Π΅ΡΠ΅ΠΌΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΠΈΠ’ΠΎΡΡΡ ΠΊΠΎΠ΄Π° Ρ ΠΡΠΏΠΈΡΠ΅Ρ ΠΈ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΠΌΠΎ ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ (Π΄ΡΠ³ΠΌΠ΅ Π ΡΠ½):
from __future__ import print_function
import torch
x = torch.rand(5, 3)
print(x)
Π Π΅Π·ΡΠ»ΡΠ°Ρ Π±ΠΈ ΡΡΠ΅Π±Π°ΠΎ Π±ΠΈΡΠΈ ΠΎΡΠΏΡΠΈΠ»ΠΈΠΊΠ΅ ΠΎΠ²Π°ΠΊΠΎ:
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ»ΠΈΡΠ°Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ, ΠΎΠ½Π΄Π° ΡΠΌΠΎ ΡΠ²Π΅ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π»ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΏΠΎΡΠ½Π΅ΠΌΠΎ Π΄Π° ΡΠ°Π·Π²ΠΈΡΠ°ΠΌΠΎ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ!
ΠΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅
ΠΠ°ΠΏΡΠ°Π²ΠΈΡΠ΅ΠΌΠΎ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ°. Π£Π·ΠΌΠΈΠΌΠΎ ΠΎΠ²ΠΎ ΠΊΠ°ΠΎ ΠΎΡΠ½ΠΎΠ²Ρ
ΠΠΎΡΠΈΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ°Π²Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΡΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π¦ΠΠ€ΠΠ 10 Π·Π° ΠΎΠ±ΡΠΊΡ ΠΌΡΠ΅ΠΆΠ΅. ΠΠΌΠ° ΠΊΠ»Π°ΡΠ΅: βΠ°Π²ΠΈΠΎΠ½β, βΠ°ΡΡΠΎΠΌΠΎΠ±ΠΈΠ»β, βΠΏΡΠΈΡΠ°β, βΠΌΠ°ΡΠΊΠ°β, βΡΠ΅Π»Π΅Π½β, βΠΏΠ°Ρβ, βΠΆΠ°Π±Π°β, βΠΊΠΎΡβ, βΠ±ΡΠΎΠ΄β, βΠΊΠ°ΠΌΠΈΠΎΠ½β. Π‘Π»ΠΈΠΊΠ΅ Ρ Π¦ΠΠ€ΠΠ 10 ΡΡ 3ΠΊ32ΠΊ32, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ 3-ΠΊΠ°Π½Π°Π»Π½Π΅ ΡΠ»ΠΈΠΊΠ΅ Ρ Π±ΠΎΡΠΈ ΠΎΠ΄ 32ΠΊ32 ΠΏΠΈΠΊΡΠ΅Π»Π°.
ΠΠ° ΡΠ°Π΄ ΡΠ΅ΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΠΎ ΠΠΈΠ’ΠΎΡΡΡ
Π·Π° ΡΠ°Π΄ ΡΠ° ΡΠ»ΠΈΠΊΠ°ΠΌΠ° - ΡΠΎΡΡΡ
Π²ΠΈΡΠΈΠΎΠ½.
Π£ΡΠ°Π΄ΠΈΡΠ΅ΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΠ΅ ΠΊΠΎΡΠ°ΠΊΠ΅ ΠΏΠΎ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄Ρ:
- Π£ΡΠΈΡΠ°Π²Π°ΡΠ΅ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° ΡΠΊΡΠΏΠΎΠ²Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π·Π° ΠΎΠ±ΡΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅
- ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅
- ΠΡΠ΅ΠΆΠ½Π° ΠΎΠ±ΡΠΊΠ° ΠΎ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ° ΠΎ ΠΎΠ±ΡΡΠΈ
- ΠΡΠ΅ΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΠ½ΠΈΠΌ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ°
- ΠΠΎΠ½ΠΎΠ²ΠΈΠΌΠΎ ΠΎΠ±ΡΠΊΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΠΠ£
ΠΠ·Π²ΡΡΠΈΡΠ΅ΠΌΠΎ ΡΠ°Π² Π΄ΠΎΡΠΈ ΠΊΠΎΠ΄ Ρ ΠΡΠΏΠΈΡΠ΅Ρ Π½ΠΎΡΠ΅Π±ΠΎΠΎΠΊ-Ρ.
Π£ΡΠΈΡΠ°Π²Π°ΡΠ΅ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π¦ΠΠ€ΠΠ 10
ΠΠΎΠΏΠΈΡΠ°ΡΡΠ΅ ΠΈ ΠΏΠΎΠΊΡΠ΅Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΠΊΠΎΠ΄ Ρ ΠΡΠΏΠΈΡΠ΅Ρ-Ρ:
import torch
import torchvision
import torchvision.transforms as transforms
transform = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
shuffle=True, num_workers=2)
testset = torchvision.datasets.CIFAR10(root='./data', train=False,
download=True, transform=transform)
testloader = torch.utils.data.DataLoader(testset, batch_size=4,
shuffle=False, num_workers=2)
classes = ('plane', 'car', 'bird', 'cat',
'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
ΠΠ΄Π³ΠΎΠ²ΠΎΡ Π±ΠΈ ΡΡΠ΅Π±Π°ΠΎ Π±ΠΈΡΠΈ:
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz
Extracting ./data/cifar-10-python.tar.gz to ./data
Files already downloaded and verified
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠΈΠΊΠ°ΠΆΠ΅ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ»ΠΈΠΊΠ° Π·Π° ΠΎΠ±ΡΠΊΡ Π·Π° ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅:
import matplotlib.pyplot as plt
import numpy as np
# functions to show an image
def imshow(img):
img = img / 2 + 0.5 # unnormalize
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1, 2, 0)))
plt.show()
# get some random training images
dataiter = iter(trainloader)
images, labels = dataiter.next()
# show images
imshow(torchvision.utils.make_grid(images))
# print labels
print(' '.join('%5s' % classes[labels[j]] for j in range(4)))
ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠ²ΠΎ ΡΠ°Π·ΠΌΠΎΡΡΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ° Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ°. ΠΠ²ΠΎ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΌΡΠ΅ΠΆΠ° ΠΎΠ΄ ΡΠ°ΡΠΊΠ΅ Π΄ΠΎ ΡΠ°ΡΠΊΠ΅. Π£Π·ΠΈΠΌΠ° ΡΠ»Π°Π·Π½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅, ΠΏΡΠΎΡΠ»Π΅ΡΡΡΠ΅ ΠΈΡ ΠΊΡΠΎΠ· Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ»ΠΎΡΠ΅Π²Π° ΡΠ΅Π΄Π°Π½ ΠΏΠΎ ΡΠ΅Π΄Π°Π½, Π° Π·Π°ΡΠΈΠΌ ΠΊΠΎΠ½Π°ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ ΠΈΠ·Π»Π°Π·Π½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅.
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌΠΎ ΡΠ»ΠΈΡΠ½Ρ ΠΌΡΠ΅ΠΆΡ Ρ Π½Π°ΡΠ΅ΠΌ ΠΎΠΊΡΡΠΆΠ΅ΡΡ:
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16 * 5 * 5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = self.pool(F.relu(self.conv1(x)))
x = self.pool(F.relu(self.conv2(x)))
x = x.view(-1, 16 * 5 * 5)
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
net = Net()
Π’Π°ΠΊΠΎΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΡΡ Π³ΡΠ±ΠΈΡΠΊΠ° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
ΠΡΠ΅ΠΆΠ½Π° ΠΎΠ±ΡΠΊΠ° ΠΎ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ° ΠΎ ΠΎΠ±ΡΡΠΈ
ΠΠΎΡΠ½ΠΈΠΌΠΎ Π΄Π° ΡΡΠ΅Π½ΠΈΡΠ°ΠΌΠΎ Π½Π°ΡΡ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ. ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌΡ Π΄Π° Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΎΠ²Π°Ρ ΠΊΠΎΠ΄, ΠΌΠΎΡΠ°ΡΠ΅ΡΠ΅ Π΄Π° ΡΠ°ΡΠ΅ΠΊΠ°ΡΠ΅ Π½Π΅ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄ΠΎΠΊ ΡΠ΅ ΠΏΠΎΡΠ°ΠΎ Π½Π΅ Π·Π°Π²ΡΡΠΈ. Π’ΡΠ΅Π±Π°Π»ΠΎ ΠΌΠΈ ΡΠ΅ 5 ΠΌΠΈΠ½ΡΡΠ°. ΠΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΎΠ±ΡΠΊΡ ΠΌΡΠ΅ΠΆΠ΅.
for epoch in range(2): # loop over the dataset multiple times
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# get the inputs; data is a list of [inputs, labels]
inputs, labels = data
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
# print statistics
running_loss += loss.item()
if i % 2000 == 1999: # print every 2000 mini-batches
print('[%d, %5d] loss: %.3f' %
(epoch + 1, i + 1, running_loss / 2000))
running_loss = 0.0
print('Finished Training')
ΠΠΎΠ±ΠΈΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄Π΅ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ:
ΠΠΈ ΡΡΠ²Π°ΠΌΠΎ Π½Π°Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»:
PATH = './cifar_net.pth'
torch.save(net.state_dict(), PATH)
ΠΡΠ΅ΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΠ½ΠΈΠΌ ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ°
ΠΠ±ΡΡΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΌΡΠ΅ΠΆΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠΊΡΠΏ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π·Π° ΠΎΠ±ΡΠΊΡ. ΠΠ»ΠΈ ΠΌΠΎΡΠ°ΠΌΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌΠΎ Π΄Π° Π»ΠΈ ΡΠ΅ ΠΌΡΠ΅ΠΆΠ° ΡΠΎΠΏΡΡΠ΅ Π½Π΅ΡΡΠΎ Π½Π°ΡΡΠΈΠ»Π°.
ΠΠ²ΠΎ ΡΠ΅ΠΌΠΎ ΡΠ΅ΡΡΠΈΡΠ°ΡΠΈ ΡΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΠΌΠΎ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅ΡΠΈ ΠΎΠ·Π½Π°ΠΊΡ ΠΊΠ»Π°ΡΠ΅ ΠΊΠΎΡΡ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ° ΠΌΡΠ΅ΠΆΠ° ΠΈΠ·Π»Π°Π·ΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠΈ ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ Π΄Π° Π»ΠΈ ΡΠ΅ ΠΈΡΡΠΈΠ½ΠΈΡΠ°. ΠΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΡΠ°ΡΠ΅ ΡΠ°ΡΠ½ΠΎ, Π΄ΠΎΠ΄Π°ΡΠ΅ΠΌΠΎ ΡΠ·ΠΎΡΠ°ΠΊ Π½Π° Π»ΠΈΡΡΡ ΡΠ°ΡΠ½ΠΈΡ
ΠΏΡΠ΅Π΄Π²ΠΈΡΠ°ΡΠ°.
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌΠΎ ΡΠ»ΠΈΠΊΡ ΠΈΠ· ΡΠ΅ΡΡΠ½ΠΎΠ³ ΡΠΊΡΠΏΠ°:
dataiter = iter(testloader)
images, labels = dataiter.next()
# print images
imshow(torchvision.utils.make_grid(images))
print('GroundTruth: ', ' '.join('%5s' % classes[labels[j]] for j in range(4)))
Π‘Π°Π΄Π° Π·Π°ΠΌΠΎΠ»ΠΈΠΌΠΎ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ Π΄Π° Π½Π°ΠΌ ΠΊΠ°ΠΆΠ΅ ΡΡΠ° ΡΠ΅ Π½Π° ΠΎΠ²ΠΈΠΌ ΡΠ»ΠΈΠΊΠ°ΠΌΠ°:
net = Net()
net.load_state_dict(torch.load(PATH))
outputs = net(images)
_, predicted = torch.max(outputs, 1)
print('Predicted: ', ' '.join('%5s' % classes[predicted[j]]
for j in range(4)))
Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΈΠ·Π³Π»Π΅Π΄Π°ΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π΄ΠΎΠ±ΡΠΈ: ΠΌΡΠ΅ΠΆΠ° ΡΠ΅ ΡΠ°ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°Π»Π° ΡΡΠΈ ΠΎΠ΄ ΡΠ΅ΡΠΈΡΠΈ ΡΠ»ΠΈΠΊΠ΅.
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ ΠΌΡΠ΅ΠΆΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ Ρ ΡΠ΅Π»ΠΎΠΌ ΡΠΊΡΠΏΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
correct = 0
total = 0
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
ΠΠ·Π³Π»Π΅Π΄Π° Π΄Π° ΠΌΡΠ΅ΠΆΠ° Π½Π΅ΡΡΠΎ Π·Π½Π° ΠΈ ΡΠ°Π΄ΠΈ. ΠΠ°Π΄Π° Π±ΠΈ Π½Π°ΡΡΠΌΠΈΡΠ½ΠΎ ΠΎΠ΄ΡΠ΅Π΄ΠΈΠΎ ΠΊΠ»Π°ΡΠ΅, ΡΠ°ΡΠ½ΠΎΡΡ Π±ΠΈ Π±ΠΈΠ»Π° 10%.
Π‘Π°Π΄Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΊΠΎΡΠ΅ ΠΊΠ»Π°ΡΠ΅ ΠΌΡΠ΅ΠΆΠ° Π±ΠΎΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΡΠ΅:
class_correct = list(0. for i in range(10))
class_total = list(0. for i in range(10))
with torch.no_grad():
for data in testloader:
images, labels = data
outputs = net(images)
_, predicted = torch.max(outputs, 1)
c = (predicted == labels).squeeze()
for i in range(4):
label = labels[i]
class_correct[label] += c[i].item()
class_total[label] += 1
for i in range(10):
print('Accuracy of %5s : %2d %%' % (
classes[i], 100 * class_correct[i] / class_total[i]))
Π§ΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΌΡΠ΅ΠΆΠ° Π½Π°ΡΠ±ΠΎΡΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΈ Π°ΡΡΠΎΠΌΠΎΠ±ΠΈΠ»Π° ΠΈ Π±ΡΠΎΠ΄ΠΎΠ²Π°: ΡΠ°ΡΠ½ΠΎΡΡ ΠΎΠ΄ 71%.
ΠΠ°ΠΊΠ»Π΅, ΠΌΡΠ΅ΠΆΠ° ΡΠ°Π΄ΠΈ. Π‘Π°Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° ΠΏΡΠ΅Π½Π΅ΡΠ΅ΠΌΠΎ ΡΠ΅Π³ΠΎΠ² ΡΠ°Π΄ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ (ΠΠΠ£) ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎ ΡΡΠ° ΡΠ΅ ΠΌΠ΅ΡΠ°.
ΠΠ±ΡΠΊΠ° Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅ Π½Π° ΠΠΠ£-Ρ
ΠΡΠ²ΠΎ ΡΡ ΡΠΊΡΠ°ΡΠΊΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΈΡΠΈ ΡΡΠ° ΡΠ΅ Π¦Π£ΠΠ. Π¦Π£ΠΠ (Π¦ΠΎΠΌΠΏΡΡΠ΅ Π£Π½ΠΈΡΠΈΠ΅Π΄ ΠΠ΅Π²ΠΈΡΠ΅ ΠΡΡΡ ΠΈΡΠ΅ΡΡΡΡΠ΅) ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΠ°ΡΡΠ½Π°ΡΡΡΠ²ΠΎ ΠΊΠΎΡΡ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ»Π° ΠΠΠΠΠΠ Π·Π° ΠΎΠΏΡΡΠ΅ ΡΠ°ΡΡΠ½Π°ΡΡΡΠ²ΠΎ Π½Π° Π³ΡΠ°ΡΠΈΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡΠΊΠΈΠΌ ΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌΠ° (ΠΠΠ£). Π‘Π° Π¦Π£ΠΠ-ΠΎΠΌ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈ ΠΌΠΎΠ³Ρ Π΄ΡΠ°ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ±ΡΠ·Π°ΡΡ ΡΠ°ΡΡΠ½Π°ΡΡΠΊΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠ½Π°Π³Ρ ΠΠΠ£-Π°. ΠΠ²Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ΅ Π²Π΅Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΊΠΎΡΠΈ ΡΠΌΠΎ ΠΊΡΠΏΠΈΠ»ΠΈ.
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΡΠ²ΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΠΌΠΎ Π½Π°Ρ ΠΠΠ£ ΠΊΠ°ΠΎ ΠΏΡΠ²ΠΈ Π²ΠΈΠ΄ΡΠΈΠ²ΠΈ ΡΡΠ΄Π° ΡΡΠ΅ΡΠ°Ρ.
device = torch . device ( "cuda:0" if torch . cuda . is_available () else "cpu" )
# Assuming that we are on a CUDA machine, this should print a CUDA device:
print ( device )
Π‘Π»Π°ΡΠ΅ ΠΌΡΠ΅ΠΆΠ΅ Π½Π° ΠΠΠ£:
net.to(device)
Π’Π°ΠΊΠΎΡΠ΅ ΡΠ΅ΠΌΠΎ ΠΌΠΎΡΠ°ΡΠΈ Π΄Π° ΡΠ°ΡΠ΅ΠΌΠΎ ΡΠ»Π°Π·Π΅ ΠΈ ΡΠΈΡΠ΅Π²Π΅ Π½Π° ΡΠ²Π°ΠΊΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΠΠΠ£-Ρ:
inputs, labels = data[0].to(device), data[1].to(device)
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΎΠ±ΡΡΠΈΠΌΠΎ ΠΌΡΠ΅ΠΆΡ Π½Π° ΠΠΠ£:
import torch.optim as optim
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
for epoch in range(2): # loop over the dataset multiple times
running_loss = 0.0
for i, data in enumerate(trainloader, 0):
# get the inputs; data is a list of [inputs, labels]
inputs, labels = data[0].to(device), data[1].to(device)
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs = net(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
# print statistics
running_loss += loss.item()
if i % 2000 == 1999: # print every 2000 mini-batches
print('[%d, %5d] loss: %.3f' %
(epoch + 1, i + 1, running_loss / 2000))
running_loss = 0.0
print('Finished Training')
ΠΠ²ΠΎΠ³ ΠΏΡΡΠ°, ΠΌΡΠ΅ΠΆΠ½ΠΈ ΡΡΠ΅Π½ΠΈΠ½Π³ ΡΠ΅ ΡΡΠ°ΡΠ°ΠΎ ΠΎΠΊΠΎ 3 ΠΌΠΈΠ½ΡΡΠ°. ΠΠΎΠ΄ΡΠ΅ΡΠΈΠΌΠΎ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΡΡΠ° ΡΠ°Π·Π° Π½Π° ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΠΎΡΡ ΡΡΠ°ΡΠ°Π»Π° 5 ΠΌΠΈΠ½ΡΡΠ°. Π Π°Π·Π»ΠΈΠΊΠ° Π½ΠΈΡΠ΅ Π·Π½Π°ΡΠ°ΡΠ½Π°, ΡΠΎ ΡΠ΅ Π΄Π΅ΡΠ°Π²Π° Π·Π°ΡΠΎ ΡΡΠΎ Π½Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ° Π½ΠΈΡΠ΅ ΡΠ°ΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠ°. ΠΠ°Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π²Π΅Π»ΠΈΠΊΠ΅ Π½ΠΈΠ·ΠΎΠ²Π΅ Π·Π° ΠΎΠ±ΡΠΊΡ, ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΈΠ·ΠΌΠ΅ΡΡ Π±ΡΠ·ΠΈΠ½Π΅ ΠΠΠ£-Π° ΠΈ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π°Π»Π½ΠΎΠ³ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ°ΡΠΈ.
Π§ΠΈΠ½ΠΈ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠΎ ΡΠ²Π΅. Π¨ΡΠ° ΡΠΌΠΎ ΡΡΠΏΠ΅Π»ΠΈ Π΄Π° ΡΡΠ°Π΄ΠΈΠΌΠΎ:
- ΠΠΎΠ³Π»Π΅Π΄Π°Π»ΠΈ ΡΠΌΠΎ ΡΡΠ° ΡΠ΅ ΠΠΠ£ ΠΈ ΠΈΠ·Π°Π±ΡΠ°Π»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΠΊΠΎΠΌΠ΅ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½;
- ΠΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠΎ ΠΎΠΊΡΡΠΆΠ΅ΡΠ΅ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ Π½Π΅ΡΡΠΎΠ½ΡΠΊΠ΅ ΠΌΡΠ΅ΠΆΠ΅;
- ΠΠ°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ Π½Π΅ΡΡΠΎΠ½ΡΠΊΡ ΠΌΡΠ΅ΠΆΡ Π·Π° ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ° ΠΈ ΠΎΠ±ΡΡΠΈΠ»ΠΈ ΡΠ΅;
- ΠΠΎΠ½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΌΡΠ΅ΠΆΠ½Ρ ΠΎΠ±ΡΠΊΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΠΠ£ ΠΈ Π΄ΠΎΠ±ΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΏΠΎΠ²Π΅ΡΠ°ΡΠ΅ Π±ΡΠ·ΠΈΠ½Π΅.
Π Π°Π΄ΠΎ ΡΡ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ Π½Π° ΠΏΠΈΡΠ°ΡΠ° Ρ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ°.
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ