阅读 171

LSTM-pytorch 写诗之位置编码

LSTM-pytorch 写诗之位置编码

源码和模型地址
https://download.csdn.net/download/weixin_32759777/18339209

from main import *from config import *import torch.nn as nnimport mathimport torchclass PositionalEncoding(nn.Module):
    def __init__(self, d_model, dropout=0.1, max_len=5000):
        super(PositionalEncoding, self).__init__()
        self.dropout = nn.Dropout(p=dropout)

        pe = torch.zeros(max_len, d_model)
        position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
        div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0).transpose(0, 1)
        self.register_buffer('pe', pe)

    def forward(self, x):
        '''
        x: [seq_len, batch_size, d_model]
        '''
        x = x + self.pe[:x.size(0), :]
        return self.dropout(x)class PoetryModel(nn.Module):
    def __init__(self, vocab_size, embedding_dim, hidden_dim):
        super(PoetryModel, self).__init__()
        self.hidden_dim = hidden_dim        # 词向量层,词表大小 * 向量维度
        self.embeddings = nn.Embedding(vocab_size, embedding_dim)
        # 网络主要结构
        self.lstm = nn.LSTM(embedding_dim, self.hidden_dim, num_layers=Config.num_layers)
        # 进行分类
        self.post=PositionalEncoding(256,0.1,124)
        self.linear = nn.Linear(self.hidden_dim, vocab_size)

    def forward(self, input, hidden=None):
        seq_len, batch_size = input.size()
        #print(input.shape)
        if hidden is None:
            h_0 = input.data.new(Config.num_layers, batch_size, self.hidden_dim).fill_(0).float()
            c_0 = input.data.new(Config.num_layers, batch_size, self.hidden_dim).fill_(0).float()
        else:
            h_0, c_0 = hidden        # 输入 序列长度 * batch(每个汉字是一个数字下标),
        # 输出 序列长度 * batch * 向量维度
        embeds = self.embeddings(input)
        # 输出hidden的大小: 序列长度 * batch * hidden_dim
        embeds=self.post(embeds)
        output, hidden = self.lstm(embeds, (h_0, c_0))
        output = self.linear(output.view(seq_len * batch_size, -1))
        return output, hidden1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.

增加位置编码后50轮就可以写成这样的诗

春色霁青葱,春流满目葱。孕通千里乐,诗咏九天中。小槛才初谢,前朝事已通。相思频几日,相望似千秋。月上多新月,楼中送晓风。新诗宁不醉,佳节欲何工。岂是多才子,多才在上公。高情同倚古,佳句寄中风。便是江南柳,偏伤楚客翁。有心应有寄,无事欲何穷。独鹤孤飞鹭,孤舟背远峰。风高花叶乱,月落桂花红。万里归应尽,千年事不同。花开看落日,树映映新红。路远因多事,人间亦少同。江流随浪阔,舟楫夕阳中。去国春何晚,归心
江南有游山,迢遰窥天边。中有古松柏,下有青松前。松柏不知暮,云雨何冥冥。苍苍五陵草,秋露松柏声。美人一百尺,始得长相望。玉女真麒麟,金鞍绣双环。香浓豔粉薄,夜罢歌舞多。红颜未烂易,歌舞空自闲。歌罢歌舞楼,歌声怨歌发。玉筯两不伸,泪尽不成丝。何年嫁君意,且莫怨年留。君看君不来,妾泪不可收。妾恨妾不浅,妾颜颜中秋。君非不相见,妾意在此时。莫饮莫饮酒,不如醉如丝。君不见北斗,君亦不如君。妾身未回如雪,颜
花木无人识,长年似不游。忽然无所得,徒话此中游。一夕南山雨,春来百卉流。朝云暮鸟度,夜月空闺愁。一夕梦中游,梦中双鸳鸯。君不见长安万里道,妾心如断猩猩语。一曲哀歌一曲歌,今年不见秋风多。秋风起夜愁人听,此日唯愁愁未还。君今不到潇湘里,君心不断江南雨。春来无事不可闻,君今不见洛阳水。夜宿城南望故乡,北风吹断征南陌。河边故人不可识,且愿同心独相逐。兄弟相留共別离,相如不得一时弃。君不见梁姬酒美女,壮年
朝登大江岭,南望连太白。天子降其雄,天下争何有。苍苍茂陵水,千里无尺石。何人不死死,何处不相识。何处不相识,此別何时得。君不见江南秋草生未销,去留北地不得桥。北邙芳草春草绿,今年五月花开颜。黄莺向尽白日暮,青山青春送君別。君不见当时春草草,君今不见旧人期。长安城中少年少,一去花开花满门。当时相见不相见,日暮逝水无行人。蓬莱辇中谁不识,洛阳城中无白云。君今才子多好才,赠君千里无因缘。可怜白发向前后,
秋天高高高树生,落落落花落落疎,今年花豔成彩凝。零落残花已摧折,穷阴寂历悲何端。秋来独立思归泪,此时一去无消息。落花寂寞秋风清,君今独向空山行。君不见君不见此时君未见,君不见君不见君所为君別在君心不弃上,我亦不为君所作,且愿伶伦之所乎。我不见青阳之君药与之,今年为君之以胡为君,君不见今人不如此。今夕不见二十五,与君相见相逢遇。相劝不语终不语,古人不知今古別。不知此道谁为嗟,君子相逢不相识,对此且为
月之有梁人,胡为不得汝。昨岁三年之,哭之如织女。如今十月还,终日不相识。何处不相逢,夜深心不切。汝身不如死,不得不如此。若为不得所,不如不得较。有病即为妻,今人不知利。汝是无儿人,生者不得识。死者不得罪,汝生无生道。死者不称人,不见今古狱。有何不说人,失事於此矣。死者不得罪,我心无不死。死是无生人,如今死何异?如今流水路,何处不相识。但见此路人,邂逅一相见。今年不得意,何处不相识。古道今如昨,今日
夜梦归太湖,春来多燕山。山中有竹树,果作不能攀。攀崖半成岸,买之如一攀。往往东溪里,白云如我山。下有一竿竹,潺湲无一攀。日暮下溪行,暮宿

来自51CTO博客作者东方佑的原创作品,如需转载,请注明出处,否则将追究法律责任
https://blog.51cto.com/u_15177056/2794306

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐