"窈窕泥觼湿。方有娈君子,惄焉?其常则?今我不能今。天后之德,胡然国成?有自君子,归哉极哉!"

这几句诗词看上去是不是有点诗经的味道,细看却是一窍不通,这个全都是LSTM学习了诗经后自动生成的。

import tensorflow as tf
import numpy as np
import os
import time
import textwrap
# 读取并为 py2 compat 解码
text = open("../poem_lstm_practice/poem.txt", 'rb').read().decode(encoding='utf-8')# 文本长度是指文本中的字符个数
print ('Length of text: {} characters'.format(len(text)))
# 看一看文本中的前 250 个字符
print(text[:250])
Length of text: 37551 characters关关雎鸠,在河之洲。窈窕淑女,君子好逑。参差荇菜,左右流之。窈窕淑女,寤寐求之。求之不得,寤寐思服。悠哉悠哉,辗转反侧。参差荇菜,左右采之。窈窕淑女,琴瑟友之。参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。
葛之覃兮,施于中谷,维叶萋萋。黄鸟于飞,集于灌木,其鸣喈喈。葛之覃兮,施于中谷,维叶莫莫。是刈是濩,为絺为绤,服之无斁。言告师氏,言告言归。薄污我私,薄浣我衣。害浣害否,归宁父母。
采采卷耳,不盈顷筐。嗟我怀人,置彼周行。陟彼崔嵬,我马虺隤。我姑酌彼金罍,维以不永怀。陟彼高冈,我马玄黄。我
# 文本中的非重复字符
vocab = sorted(set(text))
print ('{} unique characters'.format(len(vocab)))
2798 unique characters
# 创建从非重复字符到索引的映射
char2idx = {u:i for i, u in enumerate(vocab)}
print(char2idx)
idx2char = np.array(vocab)text_as_int = np.array([char2idx[c] for c in text])
# 设定每个输入句子长度的最大值
seq_length = 100
examples_per_epoch = len(text)//seq_length
# 创建训练样本 / 目标
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
for i in char_dataset.take(5):print(idx2char[i.numpy()])

关 关 雎

sequences = char_dataset.batch(seq_length+1, drop_remainder=True)for item in sequences.take(5):print(repr(''.join(idx2char[item.numpy()])))
'\r\n关关雎鸠,在河之洲。窈窕淑女,君子好逑。参差荇菜,左右流之。窈窕淑女,寤寐求之。求之不得,寤寐思服。悠哉悠哉,辗转反侧。参差荇菜,左右采之。窈窕淑女,琴瑟友之。参差荇菜,左右芼之。窈窕淑女,钟鼓乐之'
'。\r\n葛之覃兮,施于中谷,维叶萋萋。黄鸟于飞,集于灌木,其鸣喈喈。葛之覃兮,施于中谷,维叶莫莫。是刈是濩,为絺为绤,服之无斁。言告师氏,言告言归。薄污我私,薄浣我衣。害浣害否,归宁父母。\r\n采采卷耳,不'
'盈顷筐。嗟我怀人,置彼周行。陟彼崔嵬,我马虺隤。我姑酌彼金罍,维以不永怀。陟彼高冈,我马玄黄。我姑酌彼兕觥,维以不永伤。陟彼砠矣,我马瘏矣,我仆痡矣,云何吁矣。\r\n南有樛木,葛藟累之。乐只君子,福履绥之'
'。南有樛木,葛藟荒之。乐只君子,福履将之。南有樛木,葛藟萦之。乐只君子,福履成之。\r\n螽斯羽,诜诜兮。宜尔子孙,振振兮。螽斯羽,薨薨兮。宜尔子孙。绳绳兮。螽斯羽,揖揖兮。宜尔子孙,蛰蛰兮。\r\n桃之夭夭,'
'灼灼其华。之子于归,宜其室家。桃之夭夭,有蕡其实。之子于归,宜其家室。桃之夭夭,其叶蓁蓁。之子于归,宜其家人。\r\n肃肃兔罝,椓之丁丁。赳赳武夫,公侯干城。肃肃兔罝,施于中逵。赳赳武夫,公侯好仇。肃肃免罝'
def split_input_target(chunk):input_text = chunk[:-1]target_text = chunk[1:]return input_text, target_textdataset = sequences.map(split_input_target)
for input_example, target_example in  dataset.take(1):print ('Input data: ', repr(''.join(idx2char[input_example.numpy()])))print ('Target data:', repr(''.join(idx2char[target_example.numpy()])))
Input data:  '\r\n关关雎鸠,在河之洲。窈窕淑女,君子好逑。参差荇菜,左右流之。窈窕淑女,寤寐求之。求之不得,寤寐思服。悠哉悠哉,辗转反侧。参差荇菜,左右采之。窈窕淑女,琴瑟友之。参差荇菜,左右芼之。窈窕淑女,钟鼓乐'
Target data: '\n关关雎鸠,在河之洲。窈窕淑女,君子好逑。参差荇菜,左右流之。窈窕淑女,寤寐求之。求之不得,寤寐思服。悠哉悠哉,辗转反侧。参差荇菜,左右采之。窈窕淑女,琴瑟友之。参差荇菜,左右芼之。窈窕淑女,钟鼓乐之'
for i, (input_idx, target_idx) in enumerate(zip(input_example[:5], target_example[:5])):print("Step {:4d}".format(i))print("  input: {} ({:s})".format(input_idx, repr(idx2char[input_idx])))print("  expected output: {} ({:s})".format(target_idx, repr(idx2char[target_idx])))
Step    0input: 1 ('\r')expected output: 0 ('\n')
Step    1input: 0 ('\n')expected output: 199 ('关')
Step    2input: 199 ('关')expected output: 199 ('关')
Step    3input: 199 ('关')expected output: 2561 ('雎')
Step    4input: 2561 ('雎')expected output: 2739 ('鸠')
# 批大小
BATCH_SIZE = 64# 设定缓冲区大小,以重新排列数据集
# (TF 数据被设计为可以处理可能是无限的序列,
# 所以它不会试图在内存中重新排列整个序列。相反,
# 它维持一个缓冲区,在缓冲区重新排列元素。)
BUFFER_SIZE = 10000dataset = dataset.shuffle(BUFFER_SIZE).batch(BATCH_SIZE, drop_remainder=True)dataset
<BatchDataset shapes: ((64, 100), (64, 100)), types: (tf.int32, tf.int32)>
# 词集的长度
vocab_size = len(vocab)# 嵌入的维度
embedding_dim = 256# RNN 的单元数量
rnn_units = 1024
def build_model(vocab_size, embedding_dim, rnn_units, batch_size):model = tf.keras.Sequential([tf.keras.layers.Embedding(vocab_size, embedding_dim,batch_input_shape=[batch_size, None]),tf.keras.layers.LSTM(rnn_units,return_sequences=True,stateful=True,recurrent_initializer='glorot_uniform'),tf.keras.layers.LSTM(rnn_units,return_sequences=True,stateful=True,recurrent_initializer='glorot_uniform'),tf.keras.layers.Dense(vocab_size)])return model
model = build_model(vocab_size = len(vocab),embedding_dim=embedding_dim,rnn_units=rnn_units,batch_size=BATCH_SIZE)
for input_example_batch, target_example_batch in dataset.take(1):example_batch_predictions = model(input_example_batch)print(example_batch_predictions.shape, "# (batch_size, sequence_length, vocab_size)")
(64, 100, 2798) # (batch_size, sequence_length, vocab_size)
def loss(labels, logits):return tf.keras.losses.sparse_categorical_crossentropy(labels, logits, from_logits=True)example_batch_loss  = loss(target_example_batch, example_batch_predictions)
print("Prediction shape: ", example_batch_predictions.shape, " # (batch_size, sequence_length, vocab_size)")
print("scalar_loss:      ", example_batch_loss.numpy().mean())
Prediction shape:  (64, 100, 2798)  # (batch_size, sequence_length, vocab_size)
scalar_loss:       7.9366827
model.compile(optimizer='adam', loss=loss)
# 检查点保存至的目录
checkpoint_dir = './training_checkpoints'# 检查点的文件名
checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt_{epoch}")checkpoint_callback=tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_prefix,save_weights_only=True)
EPOCHS=1000
history = model.fit(dataset, epochs=EPOCHS, callbacks=[checkpoint_callback])
Epoch 1/1000
5/5 [==============================] - 4s 439ms/step - loss: 7.3037
Epoch 2/1000
5/5 [==============================] - 2s 443ms/step - loss: 6.1857
Epoch 3/1000
5/5 [==============================] - 2s 443ms/step - loss: 6.0807
Epoch 4/1000
5/5 [==============================] - 2s 459ms/step - loss: 6.0250
tf.train.latest_checkpoint(checkpoint_dir)
'./training_checkpoints\\ckpt_368'
model = build_model(vocab_size, embedding_dim, rnn_units, batch_size=1)model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))model.build(tf.TensorShape([1, None]))
def generate_text(model, start_string):# 评估步骤(用学习过的模型生成文本)# 要生成的字符个数num_generate = 1000# 将起始字符串转换为数字(向量化)input_eval = [char2idx[s] for s in start_string]input_eval = tf.expand_dims(input_eval, 0)# 空字符串用于存储结果text_generated = []# 低温度会生成更可预测的文本# 较高温度会生成更令人惊讶的文本# 可以通过试验以找到最好的设定temperature = 1.0# 这里批大小为 1model.reset_states()for i in range(num_generate):predictions = model(input_eval)# 删除批次的维度predictions = tf.squeeze(predictions, 0)# 用分类分布预测模型返回的字符predictions = predictions / temperaturepredicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy()# 把预测字符和前面的隐藏状态一起传递给模型作为下一个输入input_eval = tf.expand_dims([predicted_id], 0)text_generated.append(idx2char[predicted_id])return (start_string + ''.join(text_generated))
# print(generate_text(model, start_string=u"关"))
# print(type(s))
s = generate_text(model, start_string=u"窈窕")
# s = '\n'.join(textwrap.wrap(s,8))
# s = ','.join(textwrap.wrap(s,4))print(s)
窈窕泥觼湿。方有娈君子,惄焉?其常则?今我不能今。天后之德,胡然国成?有自君子,归哉极哉!
摽有梅,其实七兮。求我庶士,迨其怀兮。摽有梅,顷筐塈之。求我庶士,迨其谓之。
嘒彼小星,三五在东。肃肃宵征,夙夜在公。寔命不同!嘒彼小星,维参与昴。肃肃兔罝,椓之丁丁。赳赳武夫,公侯取:我园,无折我树檀。岂敢爱之?畏人之多言。仲可怀也,人之多言亦可畏也。
叔于田,巷无居人。岂不怀甚?子哉不死!虽则佩阻,以祈尔爵。籥舞笙鼓,乐既和奏。烝衎君子,俾尔弥尔性,饮酒来迩。
执竞武王,陟望之。燕婉之水,其叶箐蒲。六月采蓝,牖流采云。有肃鸨翼。君子有酒,嘉命式私。既见君子,其带一,乃陟南冈。乃觏于京,京师之野。于时处处,于时庐旅,于时言言,于时语语。笃公刘,于京斯依。跄跄济济,俾筵俾几。既登乃依,乃如西顾,亦孔冥。不可好也,维我愿音。冽彼泉桑,在彼中河。髧彼两髦,实维我仪。之死矢靡它。母也天只,无谅人只!泛彼柏舟,在彼中河。髧彼两髦,实维我心。之死矢靡慝。母也天只,不谅人只!
墙有茨,不可扫也。中冓之言,不可道也。所可道也,言之丑也。墙有茨,不可襄也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可襄也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之言,不可详也。所可详也,言之长也。墙有茨,不可束也。中冓之好,不可错服。独。言旋言归,复我邦家。我奕与兮,敝予又改。今哉匪周,女予卿功。靡人靡生!
交采勿狐,不居无灾。出有旧乎驺虞!
泛彼飞隼,载飞载止。嗟我兄弟,莫远具尔。或四之筵,或授之几。四筵设席,出夫玄罦。我生尔迈,维周之方。四方其章,允王维。有兔爰爰,雉离于罦。我生之初,不日其皇。谋亦孔言,是授之光。四牡骙骙,八鸾喈喈。仲山甫徂齐,丧乱其声。乐乐右。天子是毗,俾民不承。受越众君梓,无鹿信也。忧心之云,念我无禄。何以我思?不敢也行。无父,庶不我好?胡逝我梁?不作我稷。我百不显,自我出思。终诞云知,我心孔黄。或已是嘉,不永寿弟。曾孙卿民,秉心宣疾。
衡维在奏,三民之野。

LSTM写仿造诗经作诗相关推荐

  1. 我潜入清华神秘实验室,用脑机接口写了两句诗

    来源:本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处 本文约2190字,建议阅读5分钟. 本文讲述了我被赋予了"超能力"之后发生的故事. 从没想过,我也 ...

  2. 一个农村妇女写给崔永元的诗

    打开电视,一个台在放我们的田野这个节目,看名字,是个农村节目.这期介绍了一个农村妇女杨冬凌,她是个诗人,在生活里写诗.她说她的偶像是崔永元,她现场给崔永元写了一首诗,她说:或许过了一段时间,你偶然会想 ...

  3. 神经网络学习小记录40——春节到了,用LSTM写古诗不?

    神经网络学习小记录40--春节到了,用LSTM写古诗不? 学习前言 整体实现思路 github下载地址与B站连接 代码实现 1.数据处理 a.读取古诗并转化为id b.将读取到的所有古诗转化为6to1 ...

  4. 用html语言设计李白的一首诗,李白诗《赠汪伦》教学设计

    李白诗<赠汪伦>教学设计 [教材简介] <赠汪伦>是人教版义务教育课程实验教材第三册第六组课文中的一首古诗,作者是唐代著名诗人李白.这首诗主要叙述李白离开桃花潭时,他的好友汪伦 ...

  5. 深度学习(三)之LSTM写诗

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  6. python智能写诗的程序,Tensorflow Series 1: 使用LSTM实现古诗人工智能作诗

    时隔多年终于实现了这个牛逼的作诗机器人.大家可以看看效果图感受一下 本文由清华大学较为牛逼的研究生金天同学原创,欢迎转载,但是请保留这段版权信息,如果你对文章有任何疑问,欢迎微信联系我:jintian ...

  7. 雷军:有人说我写的代码像诗一样优雅~

    全世界只有3.14 % 的人关注了 爆炸吧知识 整合整理:程序员的那些事(id:iProgrammer) 雷军的代码像诗一样优雅 ↓↓↓ 有些网友在评论中质疑,说雷军代码不会是「屎」一样优雅吧.说这话 ...

  8. 诗与远方:无题(二十六)- 曾经给一个妹子写的一首诗

    曾经遇到这样一个妹子,叫废柴小姐吧,她知道我会写诗,于是要我写首诗给她,在网络交友软件底下认识的,没联系了,联系方式都没加,只是根据她的性格,写了这么几句诗: 评头论足偶遇尔,其称废柴小姐也 烹食煮饭 ...

  9. 从两句偈语开始写的一首诗《看花》,以及创造思路、过程

    今天偶然的机会,听同学说了两句偈语"看花皆是花,无物不是花",忽发奇想,想写成一首诗,在同学们的指点之下,得此一篇: 看花皆是花,无物不是花. 一朝花谢去,纷飞落谁家? 莫遣随逝水 ...

最新文章

  1. 雅虎中国弃门户回归搜索 推出新搜索产品线
  2. php引入路径配置,require.js的路径配置和css的引入方法详解
  3. 用数据可视化解读:为何2亿国人爱钓鱼
  4. 利用Struts拦截器限制上传图片的格式和大小
  5. php post处理,PHP处理GETPOST方法
  6. 憎恨之心最强套装攻略_冰雪攻略来袭,打金人不用慌
  7. iio Engine logoHTML5 应用框架 iio Engine
  8. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  9. 您在2016年会做什么? Apache Spark,Kafka,Drill等
  10. linux禁用防火墙配置,CentOS Linux防火墙配置及关闭
  11. [结构力学] 几何构造分析的技巧
  12. 很经典的独白,搞网络的童鞋们,你们懂得
  13. leetcode 《简单》 数学部分 Python实现
  14. zabbix-3.2 官方手册
  15. 大数据流水线系统PiFlow v0.5
  16. SpringAop两种配置:xml配置和注解方式
  17. 明白了虹膜,你就知道人类为什么有如此多样的瞳色了
  18. vue.js最新版获取QQ音乐播放源
  19. 三个点坐标求解一个圆
  20. 服务器返回的my为空,WCF REST服务:方法参数(对象)为空

热门文章

  1. ubuntu 卡在waiting for unattended-upgr to exit的解决
  2. win10照片查看器_Win10小技巧,帮你事半功倍
  3. 银川二中2021高考模拟考试成绩查询,银川市第二中学2020—2021年第一学期高一月考成绩分享会...
  4. web安全 维护及其服务器的管理,web服务器的管理及维护.pdf
  5. 自然语言处理实战——LSTM
  6. 微信支付SDK接入流程梳理
  7. NLP 实战 (3) | 整体设计之数据集/模型管理
  8. 实时获取当前的时区和时间的方法
  9. 多线程环境下HashMap导致CPU100%
  10. matlab eig函数