πŸ‘¨β€πŸŽ¨ NFT ΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΈ: пишСм Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ для ΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ разбСрСмся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ NFT ΠΈ напишСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ NFT ΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΈ?

NFT (Non Fungible Token) – это нСвзаимозамСняСмый, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚ΠΎΡ€Π³ΡƒΡŽΡ‚ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Ethereum.

ΠšΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΈ (CryptoPunks) – Π½Π°Π±ΠΎΡ€ ΠΈΠ· 10 000 ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… пСрсонаТСй, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прСдставляСт собой ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π²Π°Ρ‚Π°Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 24x24 пиксСля Π² 8-Π±ΠΈΡ‚Π½ΠΎΠΌ стилС. Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ ΠΏΡ€Π°Π² собствСнности хранится Π½Π° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π΅ Ethereum.

Π˜Ρ… созданиС Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ ΠΊΠ°ΠΊ экспСримСнт, ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠœΡΡ‚Ρ‚ΠΎΠΌ Π₯ΠΎΠ»Π»ΠΎΠΌ ΠΈ Π”ΠΆΠΎΠ½ΠΎΠΌ Аткинсоном Π² 2017 Π³ΠΎΠ΄Ρƒ. ΠšΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΈ послуТили Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ для стандарта ERC-721, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сСгодня основано Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ искусства ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠ².

Π­Ρ‚ΠΎ самая пСрвая сСрия NFT, которая Π²Ρ‹Π·Π²Π°Π»Π° интСрСс Ρƒ ΠΏΡƒΠ±Π»ΠΈΠΊΠΈ, ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ‚ΠΎΡ€Π³ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Β«Ρ…Π°ΠΉΠΏΠΎΠ²Ρ‹Ρ…Β» сСгодня.

Рыночная капитализация всСх 10 000 CryptoPunks Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ оцСниваСтся Π² Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ нСсколько ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² БША.

Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DCGAN (Deep Convolutional Generative Adversarial Network – Глубокая БвСрточная Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ-Π‘ΠΎΡΡ‚ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π‘Π΅Ρ‚ΡŒ) ΠΈ ΠΎΠ±ΡƒΡ‡Π°Ρ‚ΡŒ Π΅Π΅ Π½Π° Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ… CryptoPunks для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Ρ… Β«ΠΏΠ°Π½ΠΊΠΎΠ²Β» Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΎΡ‚ΡΡŽΠ΄Π°. Если Π²Ρ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ Kaggle ΠΈ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ: πŸ“Š Kaggle Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚: практичСскоС руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ….

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ слоТным Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ?

Π“Ρ€ΡƒΠΏΠΏΠ° GAN-нСйросСтСй ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ обучСния Π±Π΅Π· учитСля, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ модСлями. Π­Ρ‚ΠΎ Ρ‚ΠΈΠΏ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ описания явлСний Π² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΠΎΠ±ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ модСль с Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ GAN Π±Ρ‹Π»ΠΈ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈΠ· самых ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ послСдних Π»Π΅Ρ‚ Π² области ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ изучСния ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ², ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ провСсти нашС исслСдованиС.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° data scientist’а»

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ прСпроцСссинг

Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ находится Π² github Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для понимания нашСй нСйросСти:

# Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅
base_dir = '/kaggle/input/cryptopunks/'
os.listdir(base_dir)
data_dir = '../input/cryptopunks/txn_history-2021-10-07.jsonl'
image_dir = "../input/cryptopunks/imgs/imgs"
image_root = "../input/cryptopunks/imgs"
df = pd.read_json(base_dir + 'txn_history-2021-10-07.jsonl', lines=True)

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 100 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² количСство строк ΠΈ столбцов:

ΠžΡ‡ΠΈΡΡ‚ΠΈΠΌ наш датасСт ΠΈ оставим Ρ‚Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹.

df = df[["txn_type", "date", "eth", "punk_id", "type", "accessories"]]

Π—Π΄Π΅ΡΡŒ:

eth – Ρ†Π΅Π½Π° Π² ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚Π΅ Ethereum.

punk_id – id ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠ°.

type – Π΅Π³ΠΎ Π²ΠΈΠ΄ (ΠΏΡ€ΠΈΡˆΠ΅Π»Π΅Ρ†, Π·ΠΎΠΌΠ±ΠΈ, ΠΌΡƒΠΆΡ‡ΠΈΠ½Π°/ΠΆΠ΅Π½Ρ‰ΠΈΠ½Π°).

accessories – особСнности изобраТСния.

Π‘Ρ€Π°Π²Π½ΠΈΠΌ Ρ†Π΅Π½Ρƒ NFT-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² исходя ΠΈΠ· ΠΈΡ… Ρ‚ΠΈΠΏΠ° (Β«ΠŸΡ€ΠΈΡˆΠ΅Π»Π΅Ρ†Β», Β«Π—ΠΎΠΌΠ±ΠΈΒ» ΠΈ.Ρ‚.Π΄.):

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ†Π΅Π½Ρƒ ΠΈΠΌΠ΅ΡŽΡ‚ Β«ΠΏΠ°Π½ΠΊΠΈΒ» ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Alien.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша GAN-Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш ΠΊΠΎΠ΄ ΠΈΠΌΠ΅Π» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

  1. Ѐункция для отобраТСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…
  2. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€
  3. Дискриминатор
  4. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ функция ΠΏΠΎΡ‚Π΅Ρ€ΡŒ
  5. Код для старта Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

def tensor_imshow() – функция для отобраТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Бюда ΠΌΡ‹ прописываСм ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ.

def get_dataloader() – функция для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΡƒΠ΄Π° ΠΌΡ‹ прописываСм трансформСр (созданный для измСнСния ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ Π² подходящий Ρ„ΠΎΡ€ΠΌΠ°Ρ‚), ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ самого датасСта ΠΈ Π΅Π³ΠΎ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ°.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Класс Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° создаСт Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи ΠΎΡ‚ дискриминатора (ΠΎ Π½Ρ‘ΠΌ Π½ΠΈΠΆΠ΅). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ ΠΎΠ±ΡƒΡ‡Π°Π΅Ρ‚ дискриминатор ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ настоящих Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ являСтся Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ GAN. ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ тСсной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ дискриминатором, Ρ‡Π΅ΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ самого дискриминатора.

class Generator(nn.Module):     
    def __init__() – функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ размСрности класса Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€  
    def make_gen_block() – Β«Π½Π°Ρ‡ΠΈΠ½ΠΊΠ°Β» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ случайный input Π² экзСмпляр Π΄Π°Π½Π½Ρ‹Ρ…
return nn.Sequential(*layers)  – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ слои нСйросСти

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° дискриминатора

Дискриминатор Π² GAN-нСйросСти являСтся простым классификатором. Π•Π³ΠΎ Ρ†Π΅Π»ΡŒ – ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Ρ‚Π΅Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ созданы Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ, Ссли ΠΎΠ½Π° соотвСтствуСт Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ классифицируСт дискриминатор.

class Discriminator(nn.Module):     
    def __init__() – функция ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ размСрности класса Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€  
    def make_disc_block() – Β«Π½Π°Ρ‡ΠΈΠ½ΠΊΠ°Β» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°
return nn.Sequential(*layers) – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ слои нСйросСти

Дискриминатор классифицируСт наши Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ опрСдСляСт ΠΈΡ… ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ. Π’ΠΎ Π΅ΡΡ‚ΡŒ, дискриминационный класс сопоставляСт ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ΅ΠΉ. Π•Π³ΠΎ основная Π·Π°Π΄Π°Ρ‡Π° – ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ осущСствлСниС Π΄Π°Π½Π½ΠΎΠΉ коррСляции.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для ΠΌΠΎΠ΄Π΅Π»ΠΈ

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ. По мнСнию Ian Goodfellow, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΎΡ‚Ρ†ΠΎΠ²-основатСлСй соврСмСнного Deep Learning, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для коэффициСнтов mean=0, stdev=0.2.

def weights_init_normal(m):
    
    if isinstance(m, nn.Conv2d) or isinstance(m, nn.ConvTranspose2d):
        torch.nn.init.normal_(m.weights, 0.0, 0.02)
    
    if isinstance(m, nn.BatchNorm2d):
      torch.nn.init.normal_(m.weights, 0.0, 0.02)
              torch.nn.init.constant_(m.bias, 0)

Ѐункция ΠΏΠΎΡ‚Π΅Ρ€ΡŒ

Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для расчСта ошибки ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ. Наша главная Ρ†Π΅Π»ΡŒ – ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ мСньшС, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция ΠΏΠΎΡ‚Π΅Ρ€ΡŒ эффСктивно ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΉΡ€ΠΎΠ½Π½ΠΎΠΉ сСти ΠΊ этой Ρ†Π΅Π»ΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, Ρ€Π°Π·ΠΌΠ΅Ρ€ batch-Π° ΠΈ Π»Π΅ΠΉΠ±Π»Ρ‹:

def real_loss() – Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ потСря.

def fake_loss() – фСйковая потСря. НСобходима для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ (criterion) ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‚Π΅Ρ€ΡŒ, Ρ€Π°Π·ΠΌΠ΅Ρ€ batch-Π° (batch_size) ΠΈ Π»Π΅ΠΉΠ±Π»Ρ‹ (labels).

Π’Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈ

def print_tensor_images() – функция для отобраТСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ: Π΄Π°Π΅ΠΌ Ρ‚Π΅Π½Π·ΠΎΡ€, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ.

def train() – функция Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΈ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π³ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ дискриминатора.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ‚Ρ€Π΅Π½ΠΈΡ€ΡƒΠ΅ΠΌ саму модСль!

Π’Π²ΠΎΠ΄ΠΈΠΌ общСпринятыС числа для всСх Π³ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

z_dim = 100
beta_1 = 0.5 
beta_2 = 0.999 
lr = 0.0002
n_epochs = 100
batch_size = 128
image_size = 64

Нам Π½ΡƒΠΆΠ½ΠΎ максимально ΡΠ±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ дискриминатор. Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Adam-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ generator, Ρ‚Π°ΠΊ ΠΈ discriminator, послС Ρ‡Π΅Π³ΠΎ настроим Adam-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ g_optimizer ΠΈ d_optimizer соотвСтствСнно.

НачинаСм Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΡƒ! Π’Π²ΠΎΠ΄ΠΈΠΌ Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π²Ρ‹ΡˆΠ΅.

n_epochs = 100
train(Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹)

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ дискриминатор нСсколько прСвосходит Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, особСнно Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΡ‰Π΅. Π‘Π±Π°Π»Π°Π½ΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² стандартном GAN ΠΎΡ‡Π΅Π½ΡŒ слоТно, Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сдСлали Ρ€Π°Π½Π΅Π΅, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π·Ρ€Ρ‹Π² ΠΌΠ΅ΠΆΠ΄Ρƒ двумя элСмСнтами Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС.

БохраняСм ΠΏΡ€Π΅Π΄ΠΎΠ±ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ модСль для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

def save_model(generator,file_name):
    generator = generator.to('cuda')
    torch.save(generator.state_dict(),"cryptopunks_generator.pth")

save_model(generator, "kaggle")

Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΎΠ²

generator.to(device)
generator.eval() 
sample_size=8

for i in range(8):    

    fixed_z = Generator.get_noise(n_samples=sample_size, 
                                  z_dim=z_dim, 
                                  device=device)    
    sample_image = generator(fixed_z)
    print_tensor_images(sample_image)

Π“ΠΎΡ‚ΠΎΠ²ΠΎ! Написанная Π½Π°ΠΌΠΈ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ изобраТСния ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠΏΠ°Π½ΠΊΠΎΠ². ΠœΡ‹ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»ΠΈ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

***

Основная Ρ†Π΅Π»ΡŒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ – ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Π°ΠΌ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ строим Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ изобраТСния. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΡ‹ взяли ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ NFT-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² CryptoPunks.

Пайплайн Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя:

  1. ΠžΠ±Π·ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… для понимания Ρ‚ΠΎΠ³ΠΎ, какая Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ (Π² нашСм случаС – GAN, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ-ΡΠΎΡΡ‚ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ)
  2. ПониманиС ΠΈΠ½Ρ‚ΡƒΠΈΡ†ΠΈΠΈ, которая стоит Π·Π° Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒΡŽ. Π£ нас это «сорСвнованиС» Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ дискриминатора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ.
  3. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π΅Π΅ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ сохранСниС.
  4. ГСнСрация Π½ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° основС Π½Π°Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· этого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ описанноС Π²Ρ‹ΡˆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. НапримСр, ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ, ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ способ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Π·ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ для достиТСния Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

БСскрайнСС ΠΏΠΎΠ»Π΅ Π“Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ ΠžΠ±ΡƒΡ‡Π΅Π½ΠΈΡ (Deep Learning) – это Ρ†Π΅Π»ΠΎΠ΅ искусство, ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹ смоТСтС, комбинируя самыС смСлыС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ с Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠΈ.

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

matyushkin
07 апрСля 2020

ВОП-15 ΠΊΠ½ΠΈΠ³ ΠΏΠΎ Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Книги ΠΏΠΎ Python (ΠΈ связанным с Π½ΠΈΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ) Π½Π° русском языкС. Рас...
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
16 ноября 2019

DeepFake-Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»: создаСм собствСнный Π΄ΠΈΠΏΡ„Π΅ΠΉΠΊ Π² DeepFaceLab

РассказываСм ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ DeepFake ΠΈ шаг Π·Π° шагом учимся Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΈΠΏΡ„Π΅ΠΉΠΊΠΈ Π² ...
admin
14 июля 2017

ПишСм свою Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ: пошаговоС руководство

ΠžΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π³Π°ΠΉΠ΄ ΠΏΡ€ΠΎ Π½Π΅ΠΉΡ€ΠΎΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… элСмС...