一获洲、pytouch
1.torch.nn.Linear(in_features, out_features, bias=True)
其中:in_features指的是輸入的張量的大小锹雏,即輸入的[batch_size, size]中的size或粮。
?? ? out_features指的是輸出的張量的大小,即輸出的二維張量的形狀為[batch_size亡呵,output_size]晕讲,當(dāng)然,它也代表了該全連接層的神經(jīng)元個(gè)數(shù)率拒。
2.torch.nn.init.normal_(tensor, mean=0, std=1)
? ?? 正態(tài)分布:服從~N(mean,std)N(mean,std)? ? ? N(mean, std)N(mean,std)
3.torch.nn.init.constant_(tensor, val)
? ?? 初始化整個(gè)矩陣為常數(shù)val
4.torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')損失函數(shù)
參數(shù): reduce(bool)- 返回值是否為標(biāo)量,默認(rèn)為True
? ? ? ? ?? size_average(bool)- 當(dāng)reduce=True時(shí)有效禁荒。為True時(shí)猬膨,返回的loss為平均值;為False時(shí)呛伴,返回的各樣本的loss之和勃痴。
5.torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)優(yōu)化函數(shù)
? ? ? ? ? ? params (iterable) – 待優(yōu)化參數(shù)的iterable或者是定義了參數(shù)組的dict
????????????lr (float) – 學(xué)習(xí)率
????????????momentum (float, 可選) – 動(dòng)量因子(默認(rèn):0)
????????????weight_decay (float, 可選) – 權(quán)重衰減(L2懲罰)(默認(rèn):0)
????????????dampening (float, 可選) – 動(dòng)量的抑制因子(默認(rèn):0)
? ? ? ? ? ? nesterov (bool, 可選) – 使用Nesterov動(dòng)量(默認(rèn):False)
6.torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
參數(shù):
weight(Tensor)- 為每個(gè)類別的loss設(shè)置權(quán)值,常用于類別不均衡問(wèn)題热康。weight必須是float類型的tensor沛申,其長(zhǎng)度要于類別C一致,即每一個(gè)類別都要設(shè)置有weight姐军。帶weight的計(jì)算公式:
size_average(bool)- 當(dāng)reduce=True時(shí)有效铁材。為True時(shí),返回的loss為平均值奕锌;為False時(shí)著觉,返回的各樣本的loss之和。
reduce(bool)- 返回值是否為標(biāo)量惊暴,默認(rèn)為True
ignore_index(int)- 忽略某一類別饼丘,不計(jì)算其loss,其loss會(huì)為0辽话,并且肄鸽,在采用size_average時(shí)卫病,不會(huì)計(jì)算那一類的loss,除的時(shí)候的分母也不會(huì)統(tǒng)計(jì)那一類的樣本典徘。
二忽肛、文本知識(shí)
文本是一類序列數(shù)據(jù),一篇文章可以看作是字符或單詞的序列烂斋,本節(jié)將介紹文本數(shù)據(jù)的常見(jiàn)預(yù)處理步驟,預(yù)處理通常包括四個(gè)步驟:
1.讀入文本
2.分詞
3.建立字典础废,將每個(gè)詞映射到一個(gè)唯一的索引(index)
4.將文本從詞的序列轉(zhuǎn)換為索引的序列汛骂,方便輸入模型
三、循環(huán)神經(jīng)網(wǎng)絡(luò)
1.one-hot向量
我們需要將字符表示成向量评腺,這里采用one-hot向量帘瞭。假設(shè)詞典大小是N,每次字符對(duì)應(yīng)一個(gè)從0到N?1的唯一的索引蒿讥,則該字符的向量是一個(gè)長(zhǎng)度為N的向量蝶念,若字符的索引是i,則該向量的第i個(gè)位置為1芋绸,其他位置為0媒殉。下面分別展示了索引為0和2的one-hot向量,向量長(zhǎng)度等于詞典大小摔敛。
2.裁剪梯度
循環(huán)神經(jīng)網(wǎng)絡(luò)中較容易出現(xiàn)梯度衰減或梯度爆炸廷蓉,這會(huì)導(dǎo)致網(wǎng)絡(luò)幾乎無(wú)法訓(xùn)練。裁剪梯度(clip gradient)是一種應(yīng)對(duì)梯度爆炸的方法马昙。假設(shè)我們把所有模型參數(shù)的梯度拼接成一個(gè)向量g桃犬,并設(shè)裁剪的閾值是θ。裁剪后的梯度min(θ‖g‖,1)g的L2范數(shù)不超過(guò)θ行楞。
3.困惑度
我們通常使用困惑度(perplexity)來(lái)評(píng)價(jià)語(yǔ)言模型的好壞攒暇。困惑度是對(duì)交叉熵?fù)p失函數(shù)做指數(shù)運(yùn)算后得到的值。特別地子房,
最佳情況下形用,模型總是把標(biāo)簽類別的概率預(yù)測(cè)為1,此時(shí)困惑度為1池颈;
最壞情況下尾序,模型總是把標(biāo)簽類別的概率預(yù)測(cè)為0,此時(shí)困惑度為正無(wú)窮躯砰;
基線情況下每币,模型總是預(yù)測(cè)所有類別的概率都相同,此時(shí)困惑度為類別個(gè)數(shù)琢歇。
顯然兰怠,任何一個(gè)有效模型的困惑度必須小于類別個(gè)數(shù)梦鉴。在本例中,困惑度必須小于詞典大小vocab_size揭保。
具體代碼詳見(jiàn):https://www.kesci.com/org/boyuai/workspace/project