【入门教程】TensorFlow 2.0 模型:循环神经网络

本文介绍了如何在 TensorFlow 2.0 中使用 Keras 构建循环神经网络(RNN)进行文本生成,通过尼采风格文本的案例详细解释了RNN的工作原理和实现步骤,包括One Hot编码、RNN单元操作以及概率分布取样,以生成多样性的文本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文 /  李锡涵,Google Developers Expert

本文节选自《简单粗暴 TensorFlow 2.0》

图片

 

上一篇文章 中,我们介绍了在图像领域中广泛使用的卷积神经网络及其在 TensorFlow 2.0 中的实现。本文继续介绍另一种广泛流行的神经网络结构,即循环神经网络,内容如下:

  • 以文本自动生成任务为例,介绍循环神经网络在 TensorFlow 2.0 中的实现方式;

  • 为深度学习的入门者简介循环神经网络的原理。

 

 

使用 Keras 建立基于循环神经网络的文本生成模型

循环神经网络(Recurrent Neural Network, RNN)是一种适宜于处理序列数据的神经网络,被广泛用于语言模型、文本生成、机器翻译等。

基础知识和原理

这里,我们使用 RNN 来进行 尼采风格文本 的自动生成。(此处的任务及实现参考了此链接

这个任务的本质其实预测一段英文文本的接续字母的概率分布。比如,我们有以下句子:

I am a studen

这个句子(序列)一共有 13 个字符(包含空格)。当我们阅读到这个由 13 个字符组成的序列后,根据我们的经验,我们可以预测出下一个字符很大概率是 “t”。

我们希望建立这样一个模型,逐个输入一段长为 seq_length 的序列,输出这些序列接续的下一个字符的概率分布。我们从下一个字符的概率分布中采样作为预测值,然后滚雪球式地生成下两个字符,下三个字符等等,即可完成文本的生成任务。

首先,还是实现一个简单的 DataLoader 类来读取文本,并以字符为单位进行编码。设字符种类数为 num_chars ,则每种字符赋予一个 0 到 num_chars - 1 之间的唯一整数编号 i 。

 1class DataLoader():
 2    def __init__(self):
 3        path = tf.keras.utils.get_file('nietzsche.txt',
 4            origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt')
 5        with open(path, encoding='utf-8') as f:
 6            self.raw_text = f.read().lower()
 7        self.chars = sorted(list(set(self.raw_text)))
 8        self.char_indices = dict((c, i) for i, c in enumerate(self.chars))
 9        self.indices_char = dict((i, c) for i, c in enumerate(self.chars))
10        self.text = [self.char_indices[c] for c in self.raw_text]
11
12    def get_batch(self, seq_length, batch_size):
13        seq = []
14        next_char = []
15        for i in range(batch_size):
16            index = np.random.randint(0, len(self.text) - seq_length)
17            seq.append(self.text[index:index+seq_length])
18            next_char.append(self.text[index+seq_length])
19 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值