0
点赞
收藏
分享

微信扫一扫

LSTM-pytorch 写诗之位置编码

天天天蓝loveyou 2022-02-19 阅读 106

​​

from main import *
from config import *
import torch.nn as nn
import math
import torch
class 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, hidden

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

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



举报

相关推荐

0 条评论