PyTorch-opetusohjelma

Pytorchin opetusohjelman yhteenveto

Tรคssรค pytorch-opetusohjelmassa opit kaikki kรคsitteet tyhjรคstรค. Tรคmรค opetusohjelma kattaa perus- ja edistykselliset aiheet, kuten pytorchin mรครคritelmรคn, pytorchin edut ja haitat, vertailun, asennuksen, pytorch-kehyksen, regression ja kuvien luokittelun. Tรคmรค pytorch-opetusohjelma on tรคysin ilmainen.

Mikรค on PyTorh?

PyTorch on avoimen lรคhdekoodin Torch-pohjainen koneoppimiskirjasto luonnollisen kielen kรคsittelyyn kรคyttรคen PythonSe on samanlainen kuin NumPy, mutta siinรค on tehokas GPU-tuki. Se tarjoaa dynaamisia laskennallisia graafeja, joita voit muokata liikkeellรค ollessasi Autogradin avulla. PyTorch on myรถs nopeampi kuin jotkut muut kehykset. Sen kehitti Facebookin tekoรคlytutkimusryhmรค vuonna 2016.

PyTorch:n edut ja haitat

Seuraavassa on Py:n edut ja haitatTorch:

Py:n edutTorch

  1. Yksinkertainen kirjasto
    PyTorch-koodi on yksinkertainen. Se on helppo ymmรคrtรครค, ja kirjastoa voi kรคyttรครค vรคlittรถmรคsti. Katso esimerkiksi alla olevaa koodinpรคtkรครค:
class Net(torch.nn.Module):
   def __init__(self):
       super(Net, self).__init__()
       self.layer = torch.nn.Linear(1, 1)

   def forward(self, x):
       x = self.layer(x)      
       return x

Kuten edellรค mainittiin, voit mรครคrittรครค verkkomallin helposti ja ymmรคrrรคt koodin nopeasti ilman paljon harjoittelua.

  1. Dynaaminen laskennallinen kuvaaja

Dynaaminen laskennallinen kuvaaja

Kuvalรคhde: Syvรคoppimisen tutkiminen Py:n avullaTorch

Pytorch tarjoaa Dynamic Computational Graph (DAG). Laskennalliset graafit ovat tapa ilmaista matemaattisia lausekkeita graafimalleissa tai teorioissa, kuten solmuissa ja reunoissa. Solmu suorittaa matemaattisen toiminnon, ja reuna on tensori, joka syรถtetรครคn solmuihin ja kuljettaa solmun lรคhtรถรค Tensorissa.

DAG on graafi, jolla on mielivaltainen muoto ja joka pystyy suorittamaan operaatioita eri syรถtekaavioiden vรคlillรค. Jokaisella iteraatiolla luodaan uusi kaavio. Joten on mahdollista kรคyttรครค samaa graafirakennetta tai luoda uusi graafi eri toiminnolla, tai voimme kutsua sitรค dynaamiseksi graafiksi.

  1. Parempi suorituskyky

Yhteisรถt ja tutkijat vertailemalla kehyksiรค nรคhdรคksesi kumpi on nopeampi. GitHub-repo Deep Learning Frameworks ja GPU:iden vertailu kertoi, ettรค PyTorch on nopeampi kuin toinen kehys sekunnissa kรคsiteltyjen kuvien mรครคrรคssรค.

Kuten alla nรคet, vertailukaaviot vgg16:n ja resnet152:n kanssa

Py:n edutTorch

Py:n edutTorch

  1. Syntyperรคinen Python

PyTorch on enemmรคn Python-pohjainen. Jos esimerkiksi haluat kouluttaa mallia, voit kรคyttรครค natiivia ohjauskulkua, kuten looping ja rekursiot ilman, ettรค niiden suorittamiseen tarvitsee lisรคtรค erikoismuuttujia tai istuntoja. Tรคmรค on erittรคin hyรถdyllistรค koulutusprosessin kannalta.

Pytorch toteuttaa myรถs Imperative Programmingia, ja se on ehdottomasti joustavampi. Joten on mahdollista tulostaa tensoriarvo kesken laskentaprosessin.

Py:n haittapuoliTorch

PyTorch vaatii visualisointiin kolmannen osapuolen sovelluksia. Se tarvitsee myรถs API-palvelimen tuotantoa varten.

Seuraava tรคssรค Py:ssรคTorch-opetusohjelmassa opimme Py:n jaTorch ja TensorFlow.

PyTorch vs. Tensorflow

Parametri PyTorch Tensorflow
Mallin mรครคritelmรค Malli on mรครคritelty alaluokkaan ja tarjoaa helppokรคyttรถisen paketin Malli on mรครคritelty monilla, ja sinun on ymmรคrrettรคvรค syntaksi
GPU-tuki Kyllรค Kyllรค
Kaaviotyyppi Dynaaminen Staattinen
Tyรถkalut Ei visualisointityรถkalua Voit kรคyttรครค Tensorboardin visualisointityรถkalua
yhteisรถ Yhteisรถ kasvaa edelleen Suuret aktiiviset yhteisรถt

Py:n asentaminenTorch

Linux

Sen asentaminen Linuxiin on helppoa. Voit kรคyttรครค virtuaalista ympรคristรถรค tai asentaa sen suoraan pรครคkรคyttรคjรคn oikeuksin. Kirjoita tรคmรค komento terminaaliin

pip3 install --upgrade torch torchvision

AWS Sagemaker

Sagemaker on yksi alustoista Amazon Web-palvelu joka tarjoaa tehokkaan koneoppimismoottorin esiasennetuilla syvรคoppimiskokoonpanoilla datatieteilijรถille tai kehittรคjille, jotka voivat rakentaa, kouluttaa ja ottaa kรคyttรถรถn malleja missรค tahansa mittakaavassa.

Avaa ensin Amazon Sagemaker konsoli ja napsauta Luo muistikirjan esiintymรค ja tรคytรค kaikki muistikirjasi tiedot.

AWS Sagemaker

Seuraava vaihe, napsauta Avaa kรคynnistรครคksesi muistikirjan ilmentymรค.

AWS Sagemaker

Lopuksi In Jupyter, Napsauta Uusi ja valitse conda_pytorch_p36 ja olet valmis kรคyttรคmรครคn muistikirjaasi Pytorchin asennettuna.

Seuraava tรคssรค Py:ssรคTorch-opetusohjelmassa opimme Py:stรคTorch-kehyksen perusteet.

PyTorch-kehyksen perusteet

Opitaan Py:n peruskรคsitteetTorch ennen kuin syvennymme. PyTorch kรคyttรครค Tensoria jokaiselle muuttujalle samalla tavalla kuin numpy:n ndarray, mutta GPU-laskentatuella. Tรคssรค selitรคmme verkkomallin, hรคviรถfunktion, Backpropin ja optimoijan.

Verkkomalli

Verkko voidaan rakentaa alaluokittamalla taskulamppu.nn. Siinรค on 2 pรครคosaa,

  1. Ensimmรคinen osa on mรครคrittรครค kรคytettรคvรคt parametrit ja tasot
  2. Toinen osa on pรครคtehtรคvรค, jota kutsutaan eteenpรคin prosessiksi, joka ottaa syรถtteen ja ennustaa lรคhdรถn.
Import torch
import torch.nn as nn
import torch.nn.functional as F

class Model(nn.Module):
 def __init__(self):
        super(Model, self).__init__()
        self.conv1 = nn.Conv2d(3, 20, 5)
        self.conv2 = nn.Conv2d(20, 40, 5)
self.fc1 = nn.Linear(320, 10)

def forward(self, x):
       x = F.relu(self.conv1(x))
       x = F.relu(self.conv2(x))
       x = x.view(-1, 320)
       x = F.relu(self.fc1(x))
       return F.log_softmax(x)

net = Model()

Kuten yllรค nรคet, luot nn.Module-luokan nimeltรค Model. Se sisรคltรครค 2 Conv2d-tasoa ja lineaarisen kerroksen. Ensimmรคinen conv2d-kerros ottaa syรถttรถarvon 3 ja ulostulomuodon 20. Toinen kerros ottaa syรถttรถarvon 20 ja tuottaa tulosteen muodon 40. Viimeinen kerros on tรคysin yhdistetty kerros, jonka muoto on 320 ja tuottaa lรคhtรถ 10.

Vรคlitysprosessi ottaa X:n syรถtteen ja syรถttรครค sen conv1-kerrokseen ja suorittaa ReLU-toiminnon,

Samalla tavalla se syรถttรครค myรถs conv2-kerroksen. Sen jรคlkeen x muotoillaan uudelleen muotoon (-1, 320) ja syรถtetรครคn lopulliseen FC-kerrokseen. Ennen kuin lรคhetรคt lรคhdรถn, kรคytรคt softmax-aktivointitoimintoa.

Autograd mรครคrittelee taaksepรคin prosessin automaattisesti, joten sinun tarvitsee vain mรครคrittรครค eteenpรคin prosessi.

Menetystoiminto

Hรคviรถfunktiota kรคytetรครคn mittaamaan, kuinka hyvin ennustusmalli pystyy ennustamaan odotettuja tuloksia. PyTorch:lla on jo useita standardihรคviรถfunktioita torch.nn-moduulissa. Voit esimerkiksi kรคyttรครค Cross-Entropy Loss -funktiota ratkaistaksesi moniluokkaisen Py-ongelman.Torch-luokitteluongelma. Hรคviรถfunktion mรครคrittely ja hรคviรถiden laskeminen on helppoa:

loss_fn = nn.CrossEntropyLoss()

#training process
loss = loss_fn(out, target)

Oman tappiofunktion laskeminen Py:llรค on helppoaTorch.

Backprop

Suorittaaksesi backpropagation, sinun tarvitsee vain kutsua los.backward(). Virhe lasketaan, mutta muista tyhjentรครค olemassa oleva gradientti komennolla zero_grad()

net.zero_grad() # to clear the existing gradient
loss.backward() # to perform backpropragation

Optimizer

Torch.optim tarjoaa yleisiรค optimointialgoritmeja. Voit mรครคrittรครค optimoijan yksinkertaisella vaiheella:

optimizer = torch.optim.SGD(net.parameters(), lr = 0.01, momentum=0.9)

Sinun on vรคlitettรคvรค verkkomallin parametrit ja oppimisnopeus, jotta parametrit pรคivitetรครคn jokaisessa iteraatiossa backprop-prosessin jรคlkeen.

Yksinkertainen regressio Py:llรคTorch

Opetellaan yksinkertaista regressiota Py:n avullaTorch-esimerkkejรค:

Vaihe 1) Verkkomallimme luominen

Verkkomallimme on yksinkertainen lineaarinen kerros, jonka tulo- ja lรคhtรถmuoto on 1.

from __future__ import print_function

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable

class Net(nn.Module):
   def __init__(self):
       super(Net, self).__init__()
       self.layer = torch.nn.Linear(1, 1)

   def forward(self, x):
       x = self.layer(x)      
       return x

net = Net()
print(net)

Ja verkon lรคhdรถn pitรคisi olla tรคllainen

Net(
  (hidden): Linear(in_features=1, out_features=1, bias=True)
)

Vaihe 2) Testitiedot

Ennen kuin aloitat koulutusprosessin, sinun on tiedettรคvรค tietomme. Teet satunnaisen funktion mallimme testaamiseksi. Y = x3 sin(x)+ 3x+0.8 rand(100)

# Visualize our data
import matplotlib.pyplot as plt
import numpy as np

x = np.random.rand(100)
y = np.sin(x) * np.power(x,3) + 3*x + np.random.rand(100)*0.8

plt.scatter(x, y)
plt.show()

Tรคssรค on funktiomme hajontakaavio:

Yksinkertaisen regression hajontakaavio Py-funktiollaTorch

Ennen harjoitusprosessin aloittamista sinun on muunnettava numpy-taulukko muuttujiksi, joita tukee Torch ja autograd, kuten alla olevassa Py-kaaviossa on esitettyTorch-regressioesimerkki.

# convert numpy array to tensor in shape of input size
x = torch.from_numpy(x.reshape(-1,1)).float()
y = torch.from_numpy(y.reshape(-1,1)).float()
print(x, y)

Vaihe 3) Optimoija ja hรคviรถ

Seuraavaksi sinun tulee mรครคrittรครค koulutusprosessimme Optimizer ja Loss Function.

# Define Optimizer and Loss Function
optimizer = torch.optim.SGD(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()

Vaihe 4) Koulutus

Aloitetaan nyt koulutusprosessimme. 250:n aikakaudella toistat tietojamme lรถytรครคksesi parhaan arvon hyperparametreillemme.

inputs = Variable(x)
outputs = Variable(y)
for i in range(250):
   prediction = net(inputs)
   loss = loss_func(prediction, outputs) 
   optimizer.zero_grad()
   loss.backward()        
   optimizer.step()       

   if i % 10 == 0:
       # plot and show learning process
       plt.cla()
       plt.scatter(x.data.numpy(), y.data.numpy())
       plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
       plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 10, 'color':  'red'})
       plt.pause(0.1)

plt.show()

Vaihe 5) Tulos

Kuten alla nรคet, suoritit Py:n onnistuneesti.Torch-regressio neuroverkolla. Itse asiassa jokaisella iteraatiolla kuvaajan punainen viiva pรคivittyy ja muuttaa sijaintiaan datan mukaan. Mutta tรคssรค kuvassa se nรคyttรครค vain lopputuloksen, kuten alla olevassa Py-kaaviossa on esitetty.Torch-esimerkki:

Yksinkertaisen regression tuloksen sirontakaavio

Esimerkki kuvien luokittelusta Py:llรคTorch

Yksi suosituimmista tavoista oppia perusasiat syvรค oppiminen on MNIST-tietojoukon kanssa. Se on "Hei maailma" syvรคssรค oppimisessa. Tietojoukko sisรคltรครค kรคsinkirjoitettuja numeroita 0โ€“9, yhteensรค 60,000 10,000 harjoitusnรคytettรค ja 28 28 testinรคytettรค, jotka on jo merkitty kooltaan XNUMX ร— XNUMX pikseliรค.

Kuvien luokittelu Py:llรคTorch

Vaihe 1) Esikรคsittele tiedot

Tรคmรคn Py:n ensimmรคisessรค vaiheessaTorch-luokitteluesimerkissรค lataat tietojoukon torchvision-moduulilla.

Ennen kuin aloitat koulutusprosessin, sinun on ymmรคrrettรคvรค data. Torchvision lataa tietojoukon ja muuntaa kuvat verkon vaatimusten, kuten muodon ja kuvien normalisoinnin, mukaisesti.

import torch
import torchvision
import numpy as np
from torchvision import datasets, models, transforms

# This is used to transform the images to Tensor and normalize it
transform = transforms.Compose(
   [transforms.ToTensor(),
    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])

training = torchvision.datasets.MNIST(root='./data', train=True,
                                       download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(training, batch_size=4,
                                         shuffle=True, num_workers=2)

testing = torchvision.datasets.MNIST(root='./data', train=False,
                                      download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(testing, batch_size=4,
                                        shuffle=False, num_workers=2)

classes = ('0', '1', '2', '3',
          '4', '5', '6', '7', '8', '9')
         
import matplotlib.pyplot as plt
import numpy as np

#create an iterator for train_loader
# get random training images
data_iterator = iter(train_loader)
images, labels = data_iterator.next()

#plot 4 images to visualize the data
rows = 2
columns = 2
fig=plt.figure()
for i in range(4):
   fig.add_subplot(rows, columns, i+1)
   plt.title(classes[labels[i]])
   img = images[i] / 2 + 0.5     # this is for unnormalize the image
   img = torchvision.transforms.ToPILImage()(img)
   plt.imshow(img)
plt.show()

Muunnostoiminto muuntaa kuvat tensoriksi ja normalisoi arvon. Funktio torchvision.transforms.MNIST lataa tietojoukon (jos se ei ole saatavilla) hakemistoon, asettaa tietojoukon tarvittaessa koulutukseen ja suorittaa muunnosprosessin.

Tietojoukon visualisoimiseksi kรคytรคt data_iteraattoria saadaksesi seuraavan erรคn kuvia ja tarroja. Kรคytรคt matplotia nรคiden kuvien piirtรคmiseen ja niiden asianmukaiseen etikettiin. Kuten nรคet alla kuvamme ja niiden etiketit.

Esimerkki kuvien luokittelusta Py:llรคTorch

Vaihe 2) Verkkomallin mรครคritys

Nyt tรคssรค Py:ssรคToresimerkissรค teet yksinkertaisen neuroverkon Py:lleTorch-kuvan luokittelu.

Tรคssรค esittelemme sinulle toisen tavan luoda verkkomalli Py:ssรคTorch. Kรคytรคmme nn.Sequential-funktiota sekvenssimallin luomiseen nn.Modulen alaluokan luomisen sijaan.

import torch.nn as nn

# flatten the tensor into 
class Flatten(nn.Module):
   def forward(self, input):
       return input.view(input.size(0), -1)

#sequential based model
seq_model = nn.Sequential(
           nn.Conv2d(1, 10, kernel_size=5),
           nn.MaxPool2d(2),
           nn.ReLU(),
           nn.Dropout2d(),
           nn.Conv2d(10, 20, kernel_size=5),
           nn.MaxPool2d(2),
           nn.ReLU(),
           Flatten(),
           nn.Linear(320, 50),
           nn.ReLU(),
           nn.Linear(50, 10),
           nn.Softmax(),
         )

net = seq_model
print(net)

Tรคssรค on verkkomallimme tulos

Sequential(
  (0): Conv2d(1, 10, kernel_size=(5, 5), stride=(1, 1))
  (1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (2): ReLU()
  (3): Dropout2d(p=0.5)
  (4): Conv2d(10, 20, kernel_size=(5, 5), stride=(1, 1))
  (5): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
  (6): ReLU()
  (7): Flatten()
  (8): Linear(in_features=320, out_features=50, bias=True)
  (9): ReLU()
  (10): Linear(in_features=50, out_features=10, bias=True)
  (11): Softmax()
)

Verkkoselitys

  1. Jรคrjestys on, ettรค ensimmรคinen kerros on Conv2D-kerros, jonka tulomuoto on 1 ja lรคhtรถmuoto 10 ja ytimen koko 5
  2. Seuraavaksi sinulla on MaxPool2D-taso
  3. ReLU-aktivointitoiminto
  4. Dropout-kerros pienen todennรคkรถisyyden arvojen pudottamiseksi.
  5. Sitten toinen Conv2d, jonka syรถttรถmuoto on 10 viimeisestรค kerroksesta ja lรคhtรถmuoto 20, ytimen koolla 5
  6. Seuraavaksi MaxPool2d-taso
  7. ReLU aktivointitoiminto.
  8. Tรคmรคn jรคlkeen tasoitat tensorin ennen kuin syรถtรคt sen Lineaarikerrokseen
  9. Linear Layer kartoittaa tulostemme toisessa Lineaarisessa kerroksessa softmax-aktivointitoiminnolla

Vaihe 3) Kouluta malli

Ennen kuin aloitat harjoitusprosessin, sinun on mรครคritettรคvรค kriteeri ja optimointitoiminto.

Kriteerin osalta kรคytรคt CrossEntropyLoss-funktiota. Optimoijan osalta kรคytรคt SGD:tรค, jonka oppimisnopeus on 0.001 ja momentti 0.9, kuten alla olevassa Py-kaaviossa on esitetty.Torch-esimerkki.

import torch.optim as optim

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

Vรคlitysprosessi ottaa syรถtemuodon ja vรคlittรครค sen ensimmรคiselle conv2d-kerrokselle. Sieltรค se syรถtetรครคn maxpool2d:hen ja lopulta ReLU-aktivointitoimintoon. Sama prosessi tapahtuu toisessa conv2d-kerroksessa. Sen jรคlkeen syรถte muotoillaan uudelleen muotoon (-1,320 XNUMX) ja syรถtetรครคn fc-kerrokseen lรคhdรถn ennustamiseksi.

Nyt aloitat koulutusprosessin. Toistat tietojoukkomme lรคpi 2 kertaa tai 2 jaksolla ja tulostat nykyisen hรคviรถn joka 2000 erรคn vรคlein.

for epoch in range(2): 

#set the running loss at each epoch to zero
   running_loss = 0.0
# we will enumerate the train loader with starting index of 0
# for each iteration (i) and the data (tuple of input and labels)
   for i, data in enumerate(train_loader, 0):
       inputs, labels = data

# clear the gradient
       optimizer.zero_grad()

#feed the input and acquire the output from network
       outputs = net(inputs)

#calculating the predicted and the expected loss
       loss = criterion(outputs, labels)

#compute the gradient
       loss.backward()

#update the parameters
       optimizer.step()

       # print statistics
       running_loss += loss.item()
       if i % 1000 == 0:
           print('[%d, %5d] loss: %.3f' %
                 (epoch + 1, i + 1, running_loss / 1000))
           running_loss = 0.0

Jokaisella aikakaudella luetteloija saa seuraavan syรถtteen ja vastaavat nimikkeet. Ennen kuin syรถtรคmme syรถtteen verkkomalliimme, meidรคn on tyhjennettรคvรค edellinen gradientti. Tรคmรค on tarpeen, koska taaksepรคin prosessin (backpropagation) jรคlkeen gradientti kertyy sen sijaan, ettรค se korvattaisiin. Sitten laskemme hรคviรถt ennustetusta tuotosta odotetusta tuotosta. Sen jรคlkeen teemme backpropagation laskeaksemme gradientin ja lopuksi pรคivitรคmme parametrit.

Tรคssรค harjoitusprosessin tulos

[1, 	1] loss: 0.002
[1,  1001] loss: 2.302
[1,  2001] loss: 2.295
[1,  3001] loss: 2.204
[1,  4001] loss: 1.930
[1,  5001] loss: 1.791
[1,  6001] loss: 1.756
[1,  7001] loss: 1.744
[1,  8001] loss: 1.696
[1,  9001] loss: 1.650
[1, 10001] loss: 1.640
[1, 11001] loss: 1.631
[1, 12001] loss: 1.631
[1, 13001] loss: 1.624
[1, 14001] loss: 1.616
[2, 	1] loss: 0.001
[2,  1001] loss: 1.604
[2,  2001] loss: 1.607
[2,  3001] loss: 1.602
[2,  4001] loss: 1.596
[2,  5001] loss: 1.608
[2,  6001] loss: 1.589
[2,  7001] loss: 1.610
[2,  8001] loss: 1.596
[2,  9001] loss: 1.598
[2, 10001] loss: 1.603
[2, 11001] loss: 1.596
[2, 12001] loss: 1.587
[2, 13001] loss: 1.596
[2, 14001] loss: 1.603

Vaihe 4) Testaa malli

Kun olet kouluttanut mallimme, sinun on testattava tai arvioitava muilla kuvasarjoilla.

Kรคytรคmme iteraattoria test_loaderille, ja se luo joukon kuvia ja tarroja, jotka vรคlitetรครคn koulutetulle mallille. Ennustettu tulos nรคytetรครคn ja sitรค verrataan odotettuun tehoon.

#make an iterator from test_loader
#Get a batch of training images
test_iterator = iter(test_loader)
images, labels = test_iterator.next()

results = net(images)
_, predicted = torch.max(results, 1)

print('Predicted: ', ' '.join('%5s' % classes[predicted[j]] for j in range(4)))

fig2 = plt.figure()
for i in range(4):
   fig2.add_subplot(rows, columns, i+1)
   plt.title('truth ' + classes[labels[i]] + ': predict ' + classes[predicted[i]])
   img = images[i] / 2 + 0.5     # this is to unnormalize the image
   img = torchvision.transforms.ToPILImage()(img)
   plt.imshow(img)
plt.show()

Esimerkki kuvien luokittelusta Py:llรคTorch

Yhteenveto

  • PyTorch on avoimen lรคhdekoodin Torch-pohjainen Koneen oppiminen kirjasto varten luonnollinen kielenkรคsittely kรคyttรคmรคllรค Python.
  • Py:n edutTorch: 1) Yksinkertainen kirjasto, 2) Dynaaminen laskennallinen graafi, 3) Parempi suorituskyky, 4) Natiivi Python
  • PyTorch kรคyttรครค Tensoria jokaiselle muuttujalle samalla tavalla kuin numpy:n ndarray, mutta GPU-laskentatuella.
  • Yksi suosituimmista tavoista oppia syvรคn oppimisen perusteet on MNIST-tietojoukko.

Tiivistรค tรคmรค viesti seuraavasti: