pytorch中LSTM筆記


title: pytorch中LSTM筆記
date: 2018-07-12 16:52:53
tags:
- torch項(xiàng)目
categories:
- pytorch


單向LSTM筆記

專業(yè)筆記見中文參考劫拗、英文參考

torch.nn.LSTM()輸入API

  • 重要參數(shù)
    • input_size: 每一個(gè)時(shí)步(time_step)輸入到lstm單元的維度.(實(shí)際輸入的數(shù)據(jù)size為[batch_size, input_size])
    • hidden_size: 確定了隱含狀態(tài)hidden_state的維度. 可以簡(jiǎn)單的看成: 構(gòu)造了一個(gè)權(quán)重W_{input\_size*hidden\_size} , 隱含狀態(tài) h_{batch\_size*hidden\_size}=x_{batch\_size*input\_size}*W_{input\_size*hidden\_size}
    • num_layers: 疊加的層數(shù)急凰。如圖所示num_layers為3
      圖 1.
  • batch_first: 輸入數(shù)據(jù)的size為[batch_size, time_step, input_size]還是[time_step, batch_size, input_size]

示例代碼

使用單向LSTM進(jìn)行MNIST分類

import torch
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
import numpy as np
BATCH_SIZE = 50

class RNN(torch.nn.Module):
    def __init__(self):
        super().__init__()
        self.rnn=torch.nn.LSTM(
            input_size=28,
            hidden_size=64,
            num_layers=1,
            batch_first=True
        )
        self.out=torch.nn.Linear(in_features=64,out_features=10)

    def forward(self,x):
        # 以下關(guān)于shape的注釋只針對(duì)單向
        # output: [batch_size, time_step, hidden_size]
        # h_n: [num_layers,batch_size, hidden_size] # 雖然LSTM的batch_first為True,但是h_n/c_n的第一維還是num_layers
        # c_n: 同h_n
        output,(h_n,c_n)=self.rnn(x)
        print(output.size())
        # output_in_last_timestep=output[:,-1,:] # 也是可以的
        output_in_last_timestep=h_n[-1,:,:]
        # print(output_in_last_timestep.equal(output[:,-1,:])) #ture
        x=self.out(output_in_last_timestep)
        return x

if __name__ == "__main__":
    # 1. 加載數(shù)據(jù)
    training_dataset = torchvision.datasets.MNIST("./mnist", train=True,
                                                  transform=torchvision.transforms.ToTensor(), download=True)
    dataloader = Data.DataLoader(dataset=training_dataset,
                                          batch_size=BATCH_SIZE, shuffle=True, num_workers=2)
    # showSample(dataloader)
    test_data=torchvision.datasets.MNIST(root="./mnist",train=False,
                                        transform=torchvision.transforms.ToTensor(),download=False)
    test_dataloader=Data.DataLoader(
        dataset=test_data,batch_size=1000,shuffle=False,num_workers=2)
    testdata_iter=iter(test_dataloader)
    test_x,test_y=testdata_iter.next()
    test_x=test_x.view(-1,28,28)
    # 2. 網(wǎng)絡(luò)搭建
    net=RNN()
    # 3. 訓(xùn)練
    # 3. 網(wǎng)絡(luò)的訓(xùn)練(和之前CNN訓(xùn)練的代碼基本一樣)
    optimizer=torch.optim.Adam(net.parameters(),lr=0.001)
    loss_F=torch.nn.CrossEntropyLoss()
    for epoch in range(1): # 數(shù)據(jù)集只迭代一次
        for step, input_data in enumerate(dataloader):
            x,y=input_data
            pred=net(x.view(-1,28,28))
    
            loss=loss_F(pred,y) # 計(jì)算loss
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            if step%50==49: # 每50步洪规,計(jì)算精度
                with torch.no_grad():
                    test_pred=net(test_x)
                    prob=torch.nn.functional.softmax(test_pred,dim=1)
                    pred_cls=torch.argmax(prob,dim=1)
                    acc=(pred_cls==test_y).sum().numpy()/pred_cls.size()[0]
                    print(f"{epoch}-{step}: accuracy:{acc}")

LSTM輸出API

由上面代碼可以看到輸出為:output,(h_n,c_n)=self.rnn(x)

image
  • output: 如果num_layer為3翅阵,則output只記錄最后一層(即调炬,第三層)的輸出

    • 對(duì)應(yīng)圖中向上的各個(gè)time_step的h_t乔夯,也即output
    • 其size根據(jù)batch_first而不同库说〔卣叮可能是[batch_size, time_step, hidden_size][time_step, batch_size, hidden_size]
  • h_n: 各個(gè)層的最后一個(gè)時(shí)步的隱含狀態(tài)h.

    • size為[num_layers,batch_size, hidden_size]
    • 對(duì)應(yīng)圖中向右的h_t. 可以看出對(duì)于單層單向的LSTM他匪, 其h_n最后一層輸出h_n[-1,:,:]菇存,和output最后一個(gè)時(shí)步的輸出output[:,-1,:]相等。在示例代碼中print(h_n[-1,:,:].equal(output[:,-1,:]))會(huì)打印True
  • c_n: 各個(gè)層的最后一個(gè)時(shí)步的隱含狀態(tài)C

    • c_n可以看成另一個(gè)隱含狀態(tài)邦蜜,size和h_n相同

參考文獻(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末依鸥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悼沈,更是在濱河造成了極大的恐慌贱迟,老刑警劉巖姐扮,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異衣吠,居然都是意外死亡茶敏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門缚俏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)惊搏,“玉大人,你說我怎么就攤上這事袍榆≌陀欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵包雀,是天一觀的道長(zhǎng)宿崭。 經(jīng)常有香客問我,道長(zhǎng)才写,這世上最難降的妖魔是什么葡兑? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮赞草,結(jié)果婚禮上讹堤,老公的妹妹穿的比我還像新娘。我一直安慰自己厨疙,他們只是感情好洲守,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沾凄,像睡著了一般梗醇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撒蟀,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天叙谨,我揣著相機(jī)與錄音,去河邊找鬼保屯。 笑死手负,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姑尺。 我是一名探鬼主播竟终,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼切蟋!你這毒婦竟也來(lái)了衡楞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘾境,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體镰惦,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迷守,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旺入。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兑凿。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖茵瘾,靈堂內(nèi)的尸體忽然破棺而出礼华,到底是詐尸還是另有隱情,我是刑警寧澤拗秘,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布圣絮,位于F島的核電站,受9級(jí)特大地震影響雕旨,放射性物質(zhì)發(fā)生泄漏扮匠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一凡涩、第九天 我趴在偏房一處隱蔽的房頂上張望棒搜。 院中可真熱鬧,春花似錦活箕、人聲如沸力麸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)克蚂。三九已至,卻和暖如春座慰,著一層夾襖步出監(jiān)牢的瞬間陨舱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工版仔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留游盲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓蛮粮,卻偏偏與公主長(zhǎng)得像益缎,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子然想,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容