TensorFlow使用RNN生成文本

TensorFlow使用RNN生成文本


前言

继续上一节的RNN进行文本分类,本节学习RNN生成文本
LSTM原理说明


一、数据预处理

数据预处理主要的过程有:加载文本数据,数据编码,构建DataSet,在DateSet里操作构建训练数据和目标数据,最后构建一个训练数据集和测试集(生成文本不用测试集合,因为生成的东西没有标准可以来判断,最多人来读一下评价评价。)

import tensorflow as tf

import numpy as np
import os
import time
# 加载观察数据
path_to_file = tf.keras.utils.get_file('/content/drive/My Drive/Colab Notebooks/data/names/shakespeare.txt', 'https://storage.googleapis.com/download.tensorflow.org/data/shakespeare.txt')
text = open(path_to_file, 'rb').read().decode(encoding='utf-8')
# 文本中的非重复字符
# sorted新建一个有序的变量,set能产出字符级别的list
vocab = sorted(set(text))
print(vocab)
print ('{} unique characters'.format(len(vocab)))
# 创建训练样本和目标
# 创建从非重复字符到索引的映射
char2idx = {
   u:i for i, u in enumerate(vocab)}
idx2char = np.array(vocab)
#对文本进行编码
text_as_int = np.array([char2idx[c] for c in text])
# print(char2idx)
# print(idx2char)
# print(text_as_int)
# >>>a = [1,2,3]
# >>> b = [4,5,6]
# >>> c = [4,5,6,7,8]
# >>> zipped = zip(a,b)     # 打包为元组的列表
# [(1, 4), (2, 5), (3, 6)]
# >>> zip(a,c)              # 元素个数与最短的列表一致
# [(1, 4), (2, 5), (3, 6)]
# >>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
# [(1, 2, 3), (4, 5, 6)]
# print('{')
# for char,_ in zip(char2idx, range(20)):
#     print('  {:4s}: {:3d},'.format(repr(char), char2idx[char]))
# print('  ...\n}')
# print(list(zip(char2idx, range(20))))
# print(list(range(20)))
# 设定每个输入句子长度的最大值
seq_length = 100
examples_per_epoch = len(text)//seq_length

# 创建训练样本 / 目标
# 对于每个输入序列,其对应的目标包含相同长度的文本,但是向右顺移一个字符。
# 将文本拆分为长度为 seq_length+1 的文本块。例如,假设 seq_length 为 4 
# 而且文本为 “Hello”, 那么输入序列将为 “Hell”,目标序列将为 “ello”。
# 文本向量转换为字符索引流就是转为一个dataset
char_dataset = tf.data.Dataset.from_tensor_slices(text_as_int)
# print(list(char_dataset.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不被定义的号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值