forked from KEMT/zpwiki
		
	oprava preklepu
This commit is contained in:
		
							parent
							
								
									676f66822b
								
							
						
					
					
						commit
						6e45bf17c8
					
				| @ -1,4 +1,5 @@ | |||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| # PYTORCH - LSTM TUTORIÁL | # PYTORCH - LSTM TUTORIÁL | ||||||
| 
 | 
 | ||||||
| ### Čo je to Pytorch? | ### Čo je to Pytorch? | ||||||
| @ -96,20 +97,25 @@ import torch | |||||||
| import torch.nn as nn | import torch.nn as nn | ||||||
| ``` | ``` | ||||||
| Následne sa presunieme k vytváraniu LSTM vrstvy, ktoré funguje rovnako ako pri ostatných typoch vrstiev. LSTM vrste totiž budeme priradzovať argumenty. V tomto príklade budú použité 3 argumenty: | Následne sa presunieme k vytváraniu LSTM vrstvy, ktoré funguje rovnako ako pri ostatných typoch vrstiev. LSTM vrste totiž budeme priradzovať argumenty. V tomto príklade budú použité 3 argumenty: | ||||||
| - vstupná dimenzia (*input dimension*): definuje veľkosť vstupu v každom časovom kroku, napr. ak má vstupná dimenzia veľkosť 5, vstup bude vyzerať podobne - `[5, 3, 8, 6, 2]` | - vstupná dimenzia (*input dimension*): definuje veľkosť vstupu v každom časovom kroku, napr. ak má vstupná dimenzia veľkosť 5, vstup bude vyzerať podobne - `[5, 3, 8, 6, 2]`, | ||||||
| - skrytá dimenzia (*hidden dimension*): predstavuje veľkosť "cell state" a "hidden state" v každom časovom kroku | - skrytá dimenzia (*hidden dimension*): predstavuje veľkosť "cell state" a "hidden state" v každom časovom kroku, | ||||||
| - počet vrstiev: počet LSTM vrstiev "naskladaných" na seba | - počet vrstiev: počet LSTM vrstiev "naskladaných" na seba. | ||||||
|  | 
 | ||||||
| ```python | ```python | ||||||
| input_dim = 5 #velkost vstupnej dimenzie | input_dim = 5 #velkost vstupnej dimenzie | ||||||
| hidden_dim = 10 #velkosť skrytej dimenzie | hidden_dim = 10 #velkosť skrytej dimenzie | ||||||
| n_layers = 1 #pocet vrstiev | n_layers = 1 #pocet vrstiev | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| Tieto parametre potom uložíme do LSTM vrstvy nasledovne: | Tieto parametre potom uložíme do LSTM vrstvy nasledovne: | ||||||
|  | 
 | ||||||
| ```python | ```python | ||||||
| lstm_layer = nn.LSTM(input_dim, hidden_dim, n_layers) | lstm_layer = nn.LSTM(input_dim, hidden_dim, n_layers) | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| V ďalšom kroku si vytvoríme fiktívne dáta aby sme videli, ako funguje vstup na vrstve. Keďže sme veľkosť dimenzie definovali ako 5, potrebujeme vytvoriť tensor vo tvare `(1, 1, 5)`. Hodnoty v tensore reprezentujú `(veľkosť vzorky, dĺžka sekvencie, veľkosť vstupnej dimenzie)`. | V ďalšom kroku si vytvoríme fiktívne dáta aby sme videli, ako funguje vstup na vrstve. Keďže sme veľkosť dimenzie definovali ako 5, potrebujeme vytvoriť tensor vo tvare `(1, 1, 5)`. Hodnoty v tensore reprezentujú `(veľkosť vzorky, dĺžka sekvencie, veľkosť vstupnej dimenzie)`. | ||||||
| Taktiež potrebujeme inicializovať "cell state" a "hidden state" jednotky LSTM. Tieto 2 parametre sú uložené vo "zväzku" vo formáte `(hidden state, cell state)`. | Taktiež potrebujeme inicializovať "cell state" a "hidden state" jednotky LSTM. Tieto 2 parametre sú uložené vo "zväzku" vo formáte `(hidden state, cell state)`. | ||||||
|  | 
 | ||||||
| ```python | ```python | ||||||
| batch_size = 1 #velkost vzorky | batch_size = 1 #velkost vzorky | ||||||
| seq_len = 1 #dlzka sekvencie | seq_len = 1 #dlzka sekvencie | ||||||
| @ -119,26 +125,34 @@ hidden_state = torch.randn(n_layers, batch_size, hidden_dim) | |||||||
| cell_state = torch.randn(n_layers, batch_size, hidden_dim) | cell_state = torch.randn(n_layers, batch_size, hidden_dim) | ||||||
| hidden = (hidden_state, cell_state) | hidden = (hidden_state, cell_state) | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| > Ak máme vstupnú sekvenciu (*seq_len*) napr. 100, veľkosť vzorky (*batch_size*) udáva, v akých dávkach sa bude sekvencia spracovaná a vyhodnotená. Ak máme napr. veľkosť vzorky 20, sekvencia bude spracovaná v 5 dávkach po 20. | > Ak máme vstupnú sekvenciu (*seq_len*) napr. 100, veľkosť vzorky (*batch_size*) udáva, v akých dávkach sa bude sekvencia spracovaná a vyhodnotená. Ak máme napr. veľkosť vzorky 20, sekvencia bude spracovaná v 5 dávkach po 20. | ||||||
| 
 | 
 | ||||||
| Ak si chceme skontrolovať v akom tvare bude vyzerať tvar vstupnej vrstvy a skrytej vrstvy, môžeme to urobiť pomocou príkazov `print` a `shape`: | Ak si chceme skontrolovať v akom tvare bude vyzerať tvar vstupnej vrstvy a skrytej vrstvy, môžeme to urobiť pomocou príkazov `print` a `shape`: | ||||||
|  | 
 | ||||||
| ```python | ```python | ||||||
| print("Input shape:", inp.shape) | print("Input shape:", inp.shape) | ||||||
| print("Hidden shape:", hidden_state.shape, ",", cell_state.shape) | print("Hidden shape:", hidden_state.shape, ",", cell_state.shape) | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| Výstup bude vyzerať nasledovne: | Výstup bude vyzerať nasledovne: | ||||||
|  | 
 | ||||||
| ```bash | ```bash | ||||||
| (base) dl874wn@Darius-PC:~$ python test.py | (base) dl874wn@Darius-PC:~$ python test.py | ||||||
| Input shape: torch.Size([1, 1, 5]) | Input shape: torch.Size([1, 1, 5]) | ||||||
| Hidden shape: torch.Size([1, 1, 10]) , torch.Size([1, 1, 10]) | Hidden shape: torch.Size([1, 1, 10]) , torch.Size([1, 1, 10]) | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| Na záver pridáme vstupy a skryté stavy (*hidden states*): | Na záver pridáme vstupy a skryté stavy (*hidden states*): | ||||||
|  | 
 | ||||||
| ```python | ```python | ||||||
| out, hidden = lstm_layer(inp, hidden) | out, hidden = lstm_layer(inp, hidden) | ||||||
| print("Output shape:", out.shape) | print("Output shape:", out.shape) | ||||||
| print("Hidden:", hidden) | print("Hidden:", hidden) | ||||||
| ``` | ``` | ||||||
|  | 
 | ||||||
| Na výstupe by sa mal objaviť tvar výstupných tensorov a taktiež samotné tensory pre "cell state" a "hidden state": | Na výstupe by sa mal objaviť tvar výstupných tensorov a taktiež samotné tensory pre "cell state" a "hidden state": | ||||||
|  | 
 | ||||||
| ```bash | ```bash | ||||||
| Output shape: torch.Size([1, 1, 10]) | Output shape: torch.Size([1, 1, 10]) | ||||||
| Hidden: (tensor([[[-0.3184, 0.0795, -0.2122, -0.0699, -0.1824, -0.1231, -0.1314, 0.3096, -0.0371, 0.0488]]], grad_fn=<StackBackward>), tensor([[[-0.5415, 0.2349, -0.4794, -0.1918, -0.2433, -0.2443, -0.2989, 0.5557, -0.0896, 0.1062]]], grad_fn=<StackBackward>)) | Hidden: (tensor([[[-0.3184, 0.0795, -0.2122, -0.0699, -0.1824, -0.1231, -0.1314, 0.3096, -0.0371, 0.0488]]], grad_fn=<StackBackward>), tensor([[[-0.5415, 0.2349, -0.4794, -0.1918, -0.2433, -0.2443, -0.2989, 0.5557, -0.0896, 0.1062]]], grad_fn=<StackBackward>)) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user