RNN 迴圈神經網路 分類 pytorch

2021-10-22 20:26:15 字數 4587 閱讀 4547

import torch

from torch import nn

import torchvision.datasets as dsets

import torchvision.transforms as transforms

import matplotlib.pyplot as plt

import torchvision

torch.manual_seed(1)

# reproducible

# hyper parameters

epoch =

1# 訓練整批資料多少次, 為了節約時間, 我們只訓練一次

batch_size =

64time_step =

28# rnn 時間步數 / 高度

input_size =

28# rnn 每步輸入值 / 每行畫素

lr =

0.01

# learning rate

download_mnist =

true

# mnist 手寫數字

train_data = torchvision.datasets.mnist(

root=

'./mnist/'

,# 儲存或者提取位置

train=

true

,# this is training data

transform=torchvision.transforms.totensor(),

# 轉換 pil.image or numpy.ndarray 成

# torch.floattensor (c x h x w), 訓練的時候 normalize 成 [0.0, 1.0] 區間

download=download_mnist,

)

同樣, 我們除了訓練資料, 還給一些測試資料, 測試看看它有沒有訓練好.

test_data = torchvision.datasets.mnist(root=

'./mnist/'

, train=

false

)# 批訓練 50samples, 1 channel, 28x28 (50, 1, 28, 28)

train_loader = data.dataloader(dataset=train_data, batch_size=batch_size, shuffle=

true

)# 為了節約時間, 我們測試時只測試前2000個

test_x = torch.unsqueeze(test_data.test_data, dim=1)

.type

(torch.floattensor)[:

2000]/

255.

# shape from (2000, 28, 28) to (2000, 1, 28, 28), value in range(0,1)

test_y = test_data.test_labels[

:2000

]

和以前一樣, 我們用乙個 class 來建立 rnn 模型. 這個 rnn 整體流程是

(input0, state0) -> lstm -> (output0, state1);

(input1, state1) -> lstm -> (output1, state2);

...(inputn, staten)-> lstm -> (outputn, staten+1);

outputn -> linear -> prediction. 通過lstm分析每一時刻的值, 並且將這一時刻和前面時刻的理解合併在一起, 生成當前時刻對前面資料的理解或記憶. 傳遞這種理解給下一時刻分析.

class

rnn(nn.module)

:def

__init__

(self)

:super

(rnn, self)

.__init__(

) self.rnn = nn.lstm(

# lstm 效果要比 nn.rnn() 好多了

input_size=28,

# 每行的資料畫素點

hidden_size=64,

# rnn hidden unit

num_layers=1,

# 有幾層 rnn layers

batch_first=

true

,# input & output 會是以 batch size 為第一維度的特徵集 e.g. (batch, time_step, input_size)

) self.out = nn.linear(64,

10)# 輸出層

defforward

(self, x)

:# x shape (batch, time_step, input_size)

# r_out shape (batch, time_step, output_size)

# h_n shape (n_layers, batch, hidden_size) lstm 有兩個 hidden states, h_n 是分線, h_c 是主線

# h_c shape (n_layers, batch, hidden_size)

r_out,

(h_n, h_c)

= self.rnn(x,

none

)# none 表示 hidden state 會用全0的 state

# 選取最後乙個時間點的 r_out 輸出

# 這裡 r_out[:, -1, :] 的值也是 h_n 的值

RNN迴圈神經網路

評測乙個句子出現的可能性 文字自動生成 rnn迴圈處理相同的任務,就是 句子接下來的單詞是什麼。rnn迴圈記錄前面所有文字的資訊 也叫做記憶 作為 當前詞的乙個輸入 1.語言模型和文字生成 語言模型中,輸入是經過編碼的詞向量序列,輸出是一系列 的詞 2.機器翻譯 機器翻譯必須等待所有輸入結束後才能輸...

迴圈神經網路 RNN

from torchnlp.word to vector import glove vectors glove vectors hello torch.nn.utils.clip grad norm p,10 10就是最大梯度的模閾值,即保留原來梯度的方向,但梯度大小縮放至10對與梯度瀰散現象,考慮...

RNN迴圈神經網路

神經網路基礎 神經網路可以當做是擬合任意函式的黑盒子,給定特定的輸入x,就能夠的得到希望的輸出y。神經網路結構如下圖 將神經網路模型訓練好之後,輸入層輸入乙個x,通過網路之後就能夠在輸出層輸出特定的y.有了這麼強大的模型,為什麼會出現rnn 迴圈神經網 它們單獨的乙個個的輸入,前乙個輸入和後乙個輸入...