Adattudomány

PyTorch oktatóanyag lineáris regresszióval

PyTorch oktatóanyag lineáris regresszióval
A PyTorch egy Python alapú tudományos csomag, amely a NumPy ndarrays mint tenzorok helyettesítését biztosítja, amely a GPU-k maximális kihasználását szolgálja. A PyTorch keretrendszer másik pozitívuma a számítás során nyújtott sebesség és rugalmasság. A PyTorch hatékony alternatíva a Tensorszal való együttműködéshez a Tensorflow segítségével, amelyet korábban tanulmányoztunk.

A PyTorch-nak néhány nagy előnye van számítási csomagként, mint például:

A PyTorchot főként a Data Science közösség veszi át, mivel képes neurális hálózatokat kényelmesen meghatározni. Lássuk ezt a számítási csomagot működés közben ebben a leckében.

A PyTorch telepítése

Csak egy megjegyzés, mielőtt elkezdené, használhat virtuális környezetet ehhez a leckéhez, amelyet a következő paranccsal készíthetünk:

python -m virtualenv pytorch
forrás pytorch / bin / aktiválás

Miután a virtuális környezet aktív, telepítheti a PyTorch könyvtárat a virtuális env-be, hogy a következő módon létrehozott példák végrehajthatók legyenek:

pip install pytorch

Ebben a leckében felhasználjuk az Anacondát és a Jupytert. Ha telepíteni szeretné a számítógépére, nézze meg a „Hogyan telepítsük az Anaconda Python-ot az Ubuntu 18-ra” című leckét.04 LTS ”, és ossza meg visszajelzését, ha bármilyen problémába ütközik. A PyTorch Anaconda alkalmazással történő telepítéséhez használja a következő parancsot az Anaconda termináljában:

conda install -c pytorch pytorch

Valami ilyesmit látunk, amikor végrehajtjuk a fenti parancsot:

Miután az összes szükséges csomagot telepítette és elkészítette, elkezdhetjük a PyTorch könyvtár használatát a következő importálási utasítással:

import fáklya

Kezdjük a PyTorch alapvető példáival, miután telepítettük az előfeltételek csomagjait.

A PyTorch használatának megkezdése

Mivel tudjuk, hogy a neurális hálózatok alapvetően strukturálhatók, mivel a Tensors és a PyTorch a tenzorok köré épül, a teljesítmény jelentősen növekszik. Kezdjük a PyTorch használatával, ha először megvizsgáljuk az általa nyújtott Tensors típusát. A kezdéshez importálja a szükséges csomagokat:

import fáklya

Ezután meghatározhatunk egy inicializálatlan Tensort egy meghatározott méretűvel:

x = fáklya.üres (4, 4)
nyomtatás ("tömb típusa: ".formátum (x.típus)) # típus
nyomtatás ("tömb alakja: ".formátum (x.alakja)) # alakja
nyomtatás (x)

Valami ilyesmit látunk, amikor a fenti parancsfájlt végrehajtjuk:

Most készítettünk egy inicializálatlan Tensort, amelynek a fenti szkriptben meghatározott mérete volt. Megismételni a Tensorflow leckénkből, a tenzorokat n-dimenziós tömbnek nevezhetjük amely lehetővé teszi az adatok komplex dimenziókban való ábrázolását.

Futtassunk egy másik példát, ahol inicializálunk egy Torched tenzort véletlenszerű értékekkel:

random_tensor = fáklya.rand (5, 4)
nyomtatás (random_tensor)

A fenti kód futtatásakor egy véletlenszerű tenzor objektumot fogunk kinyomtatni:

Felhívjuk figyelmét, hogy a fenti véletlenszerű tenzor kimenete eltérő lehet az Ön számára, mert ez véletlenszerű !

Konvertálás a NumPy és a PyTorch között

A NumPy és a PyTorch teljesen kompatibilisek egymással. Ezért könnyű a NumPy tömböket tenzorokká alakítani és fordítva. Az API nyújtotta könnyedségen kívül valószínűleg könnyebb vizualizálni a tenzorokat NumPy tömbök formájában Tensors helyett, vagy csak a NumPy iránti szeretetemnek nevezni!

Például importáljuk a NumPy-t a szkriptünkbe, és meghatározunk egy egyszerű véletlen tömböt:

importálja a numpy-t np-ként
tömb = np.véletlen.rand (4, 3)
átalakított_tenzor = fáklya.from_numpy (tömb)
nyomtatás (" \ n".formátum (átalakított_tensor))

A fenti kód futtatásakor az átalakított tenzorobjektumot kinyomtatjuk:

Most próbáljuk meg ezt a tenzort átalakítani NumPy tömbgé:

numpy_arr = transformed_tensor.numpy ()
nyomtatás (" \ n".formátum (típus (numpy_arr), numpy_arr))

Amikor futtatjuk a fenti kódot, látni fogjuk az átalakított NumPy tömb kinyomtatását:

Ha jól megnézzük, akkor még a konverzió pontossága is megmarad, miközben a tömböt tenzorrá konvertáljuk, majd visszaállítjuk NumPy tömbgé.

Tenzorműveletek

Mielőtt elkezdenénk a neurális hálózatok körüli vitánkat, ismernünk kell azokat a műveleteket, amelyek a neuronok képzése közben elvégezhetők a tenzorokon. Széles körben fogjuk használni a NumPy modult is.

Tenzor szeletelése

Már megvizsgáltuk, hogyan lehet új Tensort készíteni, készítsünk egyet most és szelet azt:

vektor = fáklya.tenzor ([1, 2, 3, 4, 5, 6])
nyomtatás (vektor [1: 4])

A fenti kódrészlet a következő kimenetet biztosítja számunkra:

tenzor ([2, 3, 4])

Figyelmen kívül hagyhatjuk az utolsó indexet:

nyomtatás (vektor [1:])

És a Python-listával is vissza fogjuk kapni a várhatóakat:

tenzor ([2, 3, 4, 5, 6])

Úszó tenzor készítése

Készítsünk most egy úszó tenzort:

úszó_vektor = fáklya.FloatTensor ([1, 2, 3, 4, 5, 6])
nyomtatás (float_vector)

A fenti kódrészlet a következő kimenetet biztosítja számunkra:

tenzor ([1., 2., 3., 4., 5., 6.])

A tenzor típusa a következő lesz:

print (float_vector.dtype)

Visszaadja:

fáklya.úszó32

Számtani műveletek a tenzorokon

Két tenzort felvehetünk, akárcsak bármely matematikai elemet, például:

tenzor_1 = fáklya.tenzor ([2, 3, 4])
tenzor_2 = fáklya.tenzor ([3, 4, 5])
tenzor_1 + tenzor_2

A fenti kódrészlet megadja:

Tudunk szaporodnak skalárral rendelkező tenzor:

tenzor_1 * 5

Ez megadja nekünk:

Végezhetünk egy dot termék két tenzor között is:

d_termék = fáklya.pont (tensor_1, tensor_2)
d_termék

A fenti kódrészlet a következő kimenetet biztosítja számunkra:

A következő részben a tenzorok és a mátrixok magasabb dimenzióit vizsgáljuk.

Mátrix szorzás

Ebben a szakaszban meglátjuk, hogyan definiálhatjuk a mutatókat tenzorokként és megsokszorozhatjuk, akárcsak a középiskolai matematikában.

Meghatározunk egy mátrixot a kezdethez:

mátrix = fáklya.tenzor ([1, 3, 5, 6, 8, 0]).nézet (2, 3)

A fenti kódrészletben meghatároztunk egy mátrixot a tenzor függvénnyel, majd megadtuk a gombbal nézet funkció hogy 2 dimenziós tenzorként kell elkészíteni 2 sorral és 3 oszloppal. További érvekkel szolgálhatunk a Kilátás függvény további dimenziók megadásához. Csak vegye figyelembe, hogy:

sorszám szorozva oszlopszám = elemszám

Amikor a fenti kétdimenziós tenzort vizualizáljuk, a következő mátrixot fogjuk látni:

Meghatározunk egy másik azonos formájú, különböző alakú mátrixot:

mátrix_b = fáklya.tenzor ([1, 3, 5, 6, 8, 0]).nézet (3, 2)

Végre végre tudjuk hajtani a szorzást:

fáklya.matmul (mátrix, mátrix_b)

A fenti kódrészlet a következő kimenetet biztosítja számunkra:

Lineáris regresszió PyTorch-szal

A lineáris regresszió egy gépi tanulási algoritmus, amely felügyelt tanulási technikákon alapszik a regresszióelemzés elvégzésére független és függő változón. Már zavart? Határozzuk meg a lineáris regressziót egyszerű szavakkal.

A lineáris regresszió egy olyan technika, amellyel kiderülhet két változó kapcsolata, és megjósolható, hogy a független változó mekkora változása mekkora változást okoz a függő változóban. Például lineáris regressziós algoritmus alkalmazható annak megállapítására, hogy egy ház mennyi árnövekedést mutat, ha annak területe megnő egy bizonyos értékkel. Vagy mennyi lóerő van jelen egy autóban a motor súlya alapján. A 2. példa furcsán hangozhat, de mindig megpróbálhat furcsa dolgokat, és ki tudja, hogy a lineáris regresszióval kapcsolatot tud létrehozni ezek között a paraméterek között!

A lineáris regressziós technika általában egy vonal egyenletét használja a függő változó (y) és a független változó (x) közötti kapcsolat ábrázolására:

y = m * x + c

A fenti egyenletben:

Most, hogy van egy egyenletünk, amely a felhasználási esetünk kapcsolatát reprezentálja, megpróbálunk néhány mintaadatot felállítani egy diagram ábrázolással együtt. Itt található a mintaár a házárakhoz és azok méretéhez:

ház_árak = [3, 4, 5, 6, 7, 8, 9]
ház_ár_np = np.tömb (house_prices_array, dtype = np.úszó32)
house_price_np = house_price_np.átalakítás (-1,1)
house_price_tensor = Változó (fáklya.from_numpy (house_price_np))
ház_méret = [7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]
ház_méret_np = np.tömb (house_size, dtype = np.úszó32)
ház_méret_np = ház_méret_np.alakítsa át (-1, 1)
house_size_tensor = Változó (fáklya.from_numpy (house_size_np))
# lehetővé teszi az adatok vizualizálását
import matplotlib.pyplot mint plt
plt.szórás (house_prices_array, house_size_np)
plt.xlabel ("Ház ára $")
plt.ylabel ("Házméretek")
plt.cím ("Ház ára $ VS ház mérete")
plt

Ne feledje, hogy a Matplotlib-et használtuk, amely kiváló vizualizációs könyvtár. További információ a Matplotlib bemutatóban található. A fenti kódrészlet futtatása után a következő diagramdiagramot fogjuk látni:

Amikor egy vonalat készítünk a pontokon keresztül, lehet, hogy nem lesz tökéletes, de mégis elegendő a változók közötti kapcsolathoz. Most, hogy összegyűjtöttük és vizualizáltuk adatainkat, meg akarjuk jósolni, hogy mekkora lesz a ház, ha 650 000 dollárért adják el.

A lineáris regresszió alkalmazásának célja egy olyan vonal megtalálása, amely minimális hibával illeszkedik az adatainkhoz. Itt vannak a lineáris regressziós algoritmus alkalmazásához szükséges lépéseket adatainkra:

  1. Készítsen osztályt a lineáris regresszióhoz
  2. Határozza meg a modellt ebből a lineáris regressziós osztályból
  3. Számítsa ki az MSE-t (átlagos négyzethiba)
  4. Végezze el az optimalizálást a hiba csökkentése érdekében (SGD i.e. sztochasztikus gradiens süllyedés)
  5. Végezze el a Backpropagation-t
  6. Végül tegye meg az előrejelzést

Kezdjük a fenti lépések helyes importálásával:

import fáklya
fáklyától.autograd import változó
import fáklya.nn mint nn

Ezután meghatározhatjuk a lineáris regressziós osztályunkat, amely a PyTorch neurális hálózati modultól örököl:

osztály LinearRegression (nn.Modul):
def __init __ (saját, input_size, output_size):
# szuper funkció örökli az nn-t.Modul, hogy mindent elérhessünk az nn-től.Modul
szuper (LinearRegression, self).__benne__()
# Lineáris függvény
maga.lineáris = nn.Lineáris (input_dim, output_dim)
def előre (én, x):
visszatérő én.lineáris (x)

Most, hogy készen állunk az osztállyal, definiáljuk a modellünket, amelynek bemeneti és kimeneti mérete 1:

input_dim = 1
output_dim = 1
model = LinearRegression (input_dim, output_dim)

Meghatározhatjuk az MSE-t:

mse = nn.MSELoss ()

Készek vagyunk meghatározni azt az optimalizálást, amely a legjobb előrejelzés alapján elvégezhető a modell előrejelzésén:

# Optimalizálás (keresse meg a hibákat minimalizáló paramétereket)
tanulási_ráta = 0.02
optimalizáló = fáklya.optim.SGD (modell.paraméterek (), lr = tanulási arány)

Végül elkészíthetünk egy modellt a veszteségfüggvényhez:

veszteség_lista = []
iteráció_száma = 1001
iterációhoz a tartományban (iteráció_szám):
# végezzen optimalizálást nulla gradienssel
optimalizáló.zero_grad ()
eredmények = modell (ház_ár_tensor)
veszteség = mse (eredmények, house_size_tensor)
# derivált kiszámítása hátralépéssel
veszteség.hátrafelé()
# Paraméterek frissítése
optimalizáló.lépés()
# áruház veszteség
veszteség_lista.függelék (veszteség.adat)
# nyomtatási veszteség
ha (iteráció% 50 == 0):
print ('korszak , veszteség '.formátum (iteráció, veszteség.adat))
plt.plot (tartomány (iterációs_szám), veszteség_lista)
plt.xlabel ("Iterációk száma")
plt.ylabel ("veszteség")
plt

Többször optimalizáltuk a veszteségfüggvényt, és megpróbáltuk vizualizálni, hogy mekkora veszteség növekedett vagy csökkent. Itt van a kimenet:

Látjuk, hogy mivel az iterációk száma nagyobb, a veszteség nulla. Ez azt jelenti, hogy készen állunk előrejelzésünk elkészítésére és megtervezésére:

# megjósolni az autó árát
megjósolt = modell (ház_ár_tensor).adat.numpy ()
plt.szétszórás (ház_árak_rajz, ház_méret, címke = "eredeti adatok", szín = "piros")
plt.szórás (ház_árak_array, előrejelzés, label = "előrejelzett adatok", color = "kék")
plt.legenda()
plt.xlabel ("Ház ára $")
plt.ylabel ("Ház mérete")
plt.title ("Eredeti és előre jelzett értékek")
plt.előadás()

Itt van a cselekmény, amely segít megjósolni:

Következtetés

Ebben a leckében egy kiváló számítási csomagot néztünk meg, amely lehetővé teszi számunkra, hogy gyorsabb és hatékonyabb előrejelzéseket készítsünk, és még sok minden mást. A PyTorch azért népszerű, mert lehetővé teszi számunkra, hogy a Tensorokkal alapvető módon kezeljük a neurális hálózatokat.

Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...
Az X-Mouse Button Control segítségével az egér gombjait másképp alakíthatja át a különböző szoftvereknél
Lehet, hogy szüksége van egy eszközre, amely megváltoztathatja az egér vezérlését minden használt alkalmazással. Ebben az esetben kipróbálhatja az úgy...
Microsoft Sculpt Touch vezeték nélküli egér áttekintés
Nemrég olvastam a Microsoft Sculpt Touch vezeték nélküli egér és úgy döntött, hogy megveszi. Egy ideig használat után úgy döntöttem, hogy megosztom ve...