这几天主要在熟悉pyTorch,俗话说:“人生苦短,我用pyTorch”,在从TensorFlow转到pytorch之后,除了“爽”以外,我实在找不到其他形容词,简洁的语法,明了的封装,加上大大降低的debug难度,我从此入了pyTorch的坑。
为了熟悉pyTorch,我最近做了几个小项目,今天分享给大家的是一个非常有趣的项目——AI写诗。
该项目参考了《pytorch入门与实践》的教程。
**春江潮水连海平,**海上洲岛自相惊。 日斜漾漾生云色,岸密萧萧带雨青。 野宿参差随鹿啸,春船苇岸接楼船。 时因弟姪逢三岛,共忆东隣一片经。 岚涧寺长僧拾佛,金峰像卷望成经。 渔阳有路喧呼唤,渔饮何由解姓铃。 大盗既穿宾榻弱,相期不管过漳清。 吾君聚月方幽赏,君子无为计与并。 自笑才高兴天子,且终朝谒上公卿。
哈哈哈,这个是撩妹专用
浩歌夜坐生光塘,然余坏竹入袁墙。
最爱林泉多往事,喜逢日月共流光。
欢讴未暇听雷响,芷壑已惊蛛雁忙。
若无一年离世曰,宝莲山中有仙郎。
可以看出,神经网络基本学习到了一定的韵律,在意境把握上也比较准确。
使用pytorch实现RNN作诗,可以支持首句续写和藏头诗两个模式,并实现基本的音律和意境。
整理好的numpy格式数据集,
http://pytorch-1252820389.cosbj.myqcloud.com/tang_199.pth
其中包含唐诗57580首*125字,不足和多余125字的都被补充或者截断。
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.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
output, hidden = self.lstm(embeds, (h_0, c_0))
output = self.linear(output.view(seq_len * batch_size, -1))
return output, hidden
python main.py
可以进行训练,result中含有训练过程数据。
python test.py
可以测试生成效果。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。