<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Flask全棧開發(fā)案例(三) Lstm+Flask的藏頭詩/詩歌生成系統(tǒng)

          共 2625字,需瀏覽 6分鐘

           ·

          2023-07-11 01:45

          Flask+LSTM實現(xiàn)AI寫詩

          前言

          之前收到了一位粉絲需求投稿,想寫一個基于flask+LSTM實現(xiàn)AI寫詩。支持根據(jù)提示詞續(xù)寫全詩和藏頭詩。該項目參考了《pytorch入門與實踐》的教程。我們的主要功能包括根據(jù)給定提示詞生成一首詩,或者根據(jù)給定的一句話生成藏頭詩。

          兩種不同的效果展示如下

          運行效果

          1、首句生成

          我們的主要根據(jù)提示詞輸入,生成詩句。提示詞是基于訓(xùn)練數(shù)據(jù)分詞后的結(jié)果,所以可能會出現(xiàn)提示詞不在訓(xùn)練數(shù)據(jù)中無法生成的情況。

          4831d3c25eb15cdcd21e3383207c56cc.webp

          生成詩句后填寫作者和詩名,點擊保存即可保存到數(shù)據(jù)庫中。

          6a3e08dc8a59933eb225f083d048cef6.webp

          界面點擊廣場可以查看其他用戶生成的詩句。

          3997824e3d928fe526a85abd5e1553d5.webp

          2、藏頭詩

          eg:輸入"今天天氣不錯",生成的詩句為:

          bf533456a79907f0f96d41d73739b739.webp

          今日一氣生。
          天子行北極。
          天府拱飛車。
          氣利縱橫折。
          不知天地地。
          錯豁三秋景。

          數(shù)據(jù)集

          整理好的numpy格式數(shù)據(jù)集,

          http://pytorch-1252820389.cosbj.myqcloud.com/tang_199.pth

          其中包含唐詩57580首*125字,不足和多余125字的都被補充或者截斷。

          實現(xiàn)細節(jié)

          1. 1.?data是numpy數(shù)組,57580首*125字

          2. 2.?word2ix和ix2word都是字典類型,用于字符和序號的映射

          3. 3. nn.Embedding層可以輸入為long Tensor型的字的下標(int),輸入為同樣shape的詞向量,下標換成了向量,其余形狀不變。最重要的構(gòu)造參數(shù)是num_embeddings, embedding_dim

          4. 4.?nn.LSTM主要構(gòu)造參數(shù)input_size,hidden_size和num_layers,其中input_size其實就是詞向量的維度,forward時輸入為input和(h0,c0),其中input為(seq_len,batch_size,input_size),h0和c0是(num_layers $$ num_directions, batch, hidden_size),而forward的輸出為output和(hn,cn),一般后面一個就叫做hidden,output為(seq_len, batch, num_directions $$ hidden_size)

          5. 5. 在本網(wǎng)絡(luò)中,從前往后總共經(jīng)歷了這么幾個網(wǎng)絡(luò),其向量變化如下:

          • ??input:(seq_len,batch_size)

          • ??經(jīng)過embedding層,embeddings(input)

          • ??embeds:(seq_len,batch_size,embedding_size)

          • ??經(jīng)過LSTM,lstm(embeds, (h_0, c_0)),輸出output,hidden

          • ? output:(seq_len, batch, num_directions $*$ hidden_size)

          • ??output view為(seq_len $$ batch, num_directions $$ hidden_size)

          • ??進過Linear層判別

          • ? output:(seq_len $*$ batch, vocab_size)

          6. 具體訓(xùn)練時的實現(xiàn)方法:

          • ??輸入的input為(batch_size,seq_len)

          • ??data_ = data_.long().transpose(1,0).contiguous()將數(shù)據(jù)轉(zhuǎn)置并且復(fù)制了一份,成了(seq_len,batch_size)

          • ??通過input_,target = data_[:-1,:],data_[1:,:]將每句話分為前n-1個字作為真正的輸入,后n-1個字作為label,size都是(seq_len-1,batch_size)

          • ??經(jīng)過網(wǎng)絡(luò),得出output:((seq_len-1) $*$ batch, vocab_size)

          • ??通過target.view(-1)將target變成((seq_len-1) $*$ batch)

          • ??這里的target不需要是一個one-hot向量,因crossEntropy不需要,直接是下標即可

          • ??然后反向傳播即可

          7. 生成詩句的方法:

          • ??首字為

            ,首個hidden自動為空
          • ??如果有前綴風(fēng)格,通過前綴生成hidden

          • ??在首句內(nèi)部時,不使用output,僅僅不斷前進得到hidden,直到首句結(jié)尾。

          • ??進入生成模式后,實際上每次調(diào)用model都生成一個字,逐漸生成前n句話。

          • ??藏頭詩同理,只是在頭的部分將詩句首字換掉

          使用方法

          首先訓(xùn)練模型,然后運行app.py,訪問。當(dāng)然也可以直接執(zhí)行app.py,使用預(yù)訓(xùn)練內(nèi)容。

              python?main.py
            
              python?app.py
            


          源碼獲取

          點擊公眾號菜單中的"免費源碼-源碼集合"進入"編程樹"小程序搜索"詩歌生成"即可免費下載。有項目需求或者代碼修改、代碼講解的可以在小程序中發(fā)布需求或者直接聯(lián)系客服

          源碼集合


          瀏覽 89
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天操屄天天日 | 大香蕉电影网站 | 三级小视频在线观看 | 大香蕉伊人网 | 久久伊人大香蕉精品视频 |