深度學(xué)習(xí) 實驗指導(dǎo)書 實驗3:自動寫詩實驗指導(dǎo)書_第1頁
深度學(xué)習(xí) 實驗指導(dǎo)書 實驗3:自動寫詩實驗指導(dǎo)書_第2頁
深度學(xué)習(xí) 實驗指導(dǎo)書 實驗3:自動寫詩實驗指導(dǎo)書_第3頁
深度學(xué)習(xí) 實驗指導(dǎo)書 實驗3:自動寫詩實驗指導(dǎo)書_第4頁
深度學(xué)習(xí) 實驗指導(dǎo)書 實驗3:自動寫詩實驗指導(dǎo)書_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

深度學(xué)習(xí)實驗指導(dǎo)書實驗3自動寫詩實驗3自動寫詩實驗?zāi)康睦斫夂驼莆昭h(huán)神經(jīng)網(wǎng)絡(luò)概念及在深度學(xué)習(xí)框架中的實現(xiàn)。掌握使用深度學(xué)習(xí)框架進行文本生成任務(wù)的基本流程:如數(shù)據(jù)讀取、構(gòu)造網(wǎng)絡(luò)、訓(xùn)練和預(yù)測等。實驗要求基于Python語言和任意一種深度學(xué)習(xí)框架(實驗指導(dǎo)書中使用Pytorch框架進行介紹),完成數(shù)據(jù)讀取、網(wǎng)絡(luò)設(shè)計、網(wǎng)絡(luò)構(gòu)建、模型訓(xùn)練和模型測試等過程,最終實現(xiàn)一個可以自動寫詩的程序。網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計要有自己的方案,不能與實驗指導(dǎo)書完全相同。隨意給出首句,如給定“湖光秋月兩相和”,輸出模型續(xù)寫的詩句。也可以根據(jù)自己的興趣,進一步實現(xiàn)寫藏頭詩(不做要求)。要求輸出的詩句盡可能地滿足漢語語法和表達習(xí)慣。實驗提供預(yù)處理后的唐詩數(shù)據(jù)集,包含57580首唐詩(在課程網(wǎng)站下載),也可以使用其他唐詩數(shù)據(jù)集。按規(guī)定時間在課程網(wǎng)站提交實驗報告、代碼以及PPT。實驗原理實驗使用到的網(wǎng)絡(luò)結(jié)構(gòu)主要有Embedding、LSTM以及全連接層。在Pytorch中分別定義如下:Classtorch.nn.Embedding(num_embeddings,embedding_dim,padding_idx=None,max_norm=None,norm_type=2.0,scale_grad_by_freq=False,sparse=False,_weight=None)參數(shù)介紹:num_embeddings:詞匯表的大小。embedding_dim:每個嵌入向量的維度。padding_idx:如果提供的話,輸出遇到此下標(biāo)時用零填充。max_norm:如果提供的話,會對詞嵌入進行歸一化,使它們的范數(shù)小于提供的值。norm_type:對于max_norm選項計算p范數(shù)時的p。scale_grad_by_freq:如果提供的話,會根據(jù)mini-batch中單詞頻率縮放梯度。Classtorch.nn.LSTM(input_size,hidden_size,num_layers=1,bias=True,batch_first=False,dropout=0,bidirectional=False)參數(shù)介紹:input_size:輸入的特征數(shù)目。hidden_size:隱狀態(tài)的特征數(shù)目。num_layers:LSTM的層數(shù)。bias:是否使用偏置。batch_first:是否將batch放在第一維。如果為True,那么輸入輸出的Tensor形式都是(batch,seq_len,num_features)。dropout:如果非零,則除了最后一層,每層的輸出都加個Dropout層。bidirectional:是否使用雙向LSTM。輸入:(注:以下均考慮batch_first為False)intput,形式為(seq_len,batch,input_size)。h_0,形式為(num_layers*num_directions,batch,hidden_size)。c_0,形式為(num_layers*num_directions,batch,hidden_size)。輸出: output,形式為(seq_len,batch,num_directions*hidden_size)。 h_n,形式為(num_layers*num_directions,batch,hidden_size)。 c_n,形式為(num_layers*num_directions,batch,hidden_size)。Classtorch.nn.Linear(in_features,out_features,bias=True)參數(shù):in_features:每個輸入樣本的大小。out_features:每個輸出樣本的大小。bias:默認值True,若設(shè)置為False,這層不會學(xué)習(xí)偏置。四、實驗所用數(shù)據(jù)集及工具實驗提供預(yù)處理過的數(shù)據(jù)集,含有57580首唐詩,每首詩限定在125詞,不足125詞的以</s>填充。數(shù)據(jù)集以npz文件形式保存,包含三個部分:data:詩詞數(shù)據(jù),將詩詞中的字轉(zhuǎn)化為其在字典中的序號表示。ix2word:序號到字的映射word2ix:字到序號的映射五、實驗步驟與方法實驗可簡單地劃分為數(shù)據(jù)準(zhǔn)備、模型構(gòu)建、模型訓(xùn)練和模型預(yù)測四個步驟。數(shù)據(jù)準(zhǔn)備defprepareData(): datas=np.load("tang.npz")data=datas['data']ix2word=datas['ix2word'].item()word2ix=datas['word2ix'].item()data=torch.from_numpy(data)dataloader=DataLoader(data,batch_size=16,shuffle=True,num_workers=2) returndataloader,ix2word,word2ix模型構(gòu)建模型構(gòu)建時,需要創(chuàng)建一個繼承自nn.Module的類,在這個類的_init_()中定義網(wǎng)絡(luò)結(jié)構(gòu),在forward中定義前向傳播過程。示例中的模型相當(dāng)簡單,只有Embedding、單層LSTM、全連接層三個網(wǎng)絡(luò)層,同學(xué)們可以自行進行拓展,以獲得更好的效果。示例:classPoetryModel(nn.Module):def__init__(self,vocab_size,embedding_dim,hidden_dim):super(PoetryModel,self).__init__()self.hidden_dim=hidden_dimself.embeddings=nn.Embedding(vocab_size,embedding_dim)self.lstm=nn.LSTM(embedding_dim,self.hidden_dim,num_layers=1,batch_first=True)self.linear=nn.Linear(self.hidden_dim,vocab_size)defforward(self,input,hidden=None):embeds=self.embeddings(input)#[batch,seq_len]=>[batch,seq_len,embed_dim]batch_size,seq_len=input.size()ifhiddenisNone:h_0=input.data.new(1,batch_size,self.hidden_dim).fill_(0).float()c_0=input.data.new(1,batch_size,self.hidden_dim).fill_(0).float()else:h_0,c_0=hiddenoutput,hidden=self.lstm(embeds,(h_0,c_0))output=self.linear(output)output=output.reshape(batch_size*seq_len,-1)returnoutput,hidden模型訓(xùn)練模型訓(xùn)練包括定義模型、設(shè)置優(yōu)化器和損失函數(shù)、獲取模型輸出、計算誤差、誤差反向傳播等步驟。deftrain(dataloader,word2ix):#定義模型model=PoetryModel(len(word2ix),embedding_dim=Config.embedding_dim,hidden_dim=Config.hidden_dim)optimizer=optim.Adam(model.parameters(),lr=Config.lr)criterion=nn.CrossEntropyLoss()loss_meter=meter.AverageValueMeter()模型預(yù)測defgenerate(model,start_words,ix2word,word2ix):results=list(start_words)start_words_len=len(start_words)#第一個詞語是<START>input=t.Tensor([word2ix['<START>']]).view(1,1).long()hidden=Nonemodel.eval()withtorch.no_grad():foriinrange(Config.max_gen_len):output,hidden=model(input,hidden) #如果在給定的句首中,input為句首中的下一個字ifi<start_words_len:w=results[i]input=input.data.new([word2ix[w]]).view(1,1)#否則將output作為下一個input進行else:top_index=output.data[0].topk(1)[1][0].item()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論