欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习、深度学习的知识!
【前言】:在前面的内容里,我们已经学习了循环神经网络的基本结构和运算过程,这一小节里,我们将用TensorFlow实现简单的RNN,并且用来解决时序数据的预测问题,看一看RNN究竟能达到什么样的效果,具体又是如何实现的。
在这个演示项目里,我们使用随机生成的方式生成一个数据集(由0和1组成的二进制序列),然后人为的增加一些数据间的关系。最后我们把这个数据集放进RNN里,让RNN去学习其中的关系,实现二进制序列的预测1。数据生成的方式如下:
循环生成规模为五十万的数据集,每次产生的数据为0或1的概率均为0.5。如果连续生成了两个1(或两个0)的话,则下一个数据强制为0(或1)。
1.我们首先导入需要的Python模块:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3 import numpy as np
4 import tensorflow as tf
5 import matplotlib.pyplot as plt
6 from tensorflow.contrib import rnn
- 定义一个Data类,用来产生数据:
1 class Data:
2 def __init__(self, data_size, num_batch, batch_size, time_step):
3 self.data_size = data_size # 数据集的大小
4 self.batch_size = batch_size # 一个batch的大小
5 self.num_batch = num_batch # batch的数目(num_batch=data_size//batch_size)
6 self.time_step = time_step # RNN的时间步
7 self.data_without_rel = [] # 保存随机生成的数据,数据间没有联系
8 self.data_with_rel = [] # 保存有时序关系的数据
- 在构造方法“init”中,我们初始化了数据集的大小“data_size”、一个batch的大小“batch_size”、一个epoch中的batch数目“num_batch”以及RNN的时间步“time_step”。接下来我们定义一个“generate_data”方法:
9 def generate_data(self):
10 # 随机生成数据
11 self.data_without_rel = np.array(np.random.choice(2, size&#