前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习三人行(第15期)----基本RNN的Tensorflow实现

深度学习三人行(第15期)----基本RNN的Tensorflow实现

作者头像
智能算法
发布2019-05-22 00:10:47
3910
发布2019-05-22 00:10:47
举报
文章被收录于专栏:智能算法智能算法

上期我们一起学习了RNN中输入输出任性的组合方式 深度学习三人行(第14期)----RNN输入输出的组合有多任性 原理学习了两期,今天我们一起看下在tensorflow中基本的RNN是怎么实现的。

首先,为了更好的理解RNN的运行机制,我们不用tensorflow的相关RNN的操作,来实现一个简单的RNN模型。这里我们创建一个 深度学习三人行(第13期)----初识循环神经网络(RNN) 中所呈现的一个拥有5个循环神经元的一层RNN网络,其中激活函数用tanh,并且假设该RNN仅运行两个时刻,每个时刻的输入向量的大小为3,通过两个时刻来显示。代码如下:

代码语言:javascript
复制
n_inputs = 3
n_neurons = 5
X0 = tf.placeholder(tf.float32, [None, n_inputs])
X1 = tf.placeholder(tf.float32, [None, n_inputs])
Wx = tf.Variable(tf.random_normal(shape=[n_inputs, n_neurons],dtype=tf.float32))
Wy = tf.Variable(tf.random_normal(shape=[n_neurons,n_neurons],dtype=tf.float32))
b = tf.Variable(tf.zeros([1, n_neurons], dtype=tf.float32))
Y0 = tf.tanh(tf.matmul(X0, Wx) + b)
Y1 = tf.tanh(tf.matmul(Y0, Wy) + tf.matmul(X1, Wx) + b)
init = tf.global_variables_initializer()

这个网络有点绕,咋一看像两层向前传输的网络,其实不然,首先,相同的权重和偏置项都被两个层采用了。其次,在每一层都有输入,并且每一层都有单独的输出。为了运行这个模型,我们需要在两个时刻都对模型进行输入数据,如下:

代码语言:javascript
复制
import numpy as np
# Mini-batch: instance 0,instance 1,instance 2,instance 3
X0_batch = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 0, 1]]) # t = 0
X1_batch = np.array([[9, 8, 7], [0, 0, 0], [6, 5, 4], [3, 2, 1]]) # t = 1
with tf.Session() as sess:
    init.run()
    Y0_val, Y1_val = sess.run([Y0, Y1], feed_dict={X0: X0_batch, X1: X1_batch})

上面的mini-batch包含了两个时刻的输入,每个时刻有4个样本,其中每个样本包含3个特征。最后的Y0_val和Y1_val包括了两个时刻的网络所有神经元在mini-batch上的输出。 下面是输出的结果:

代码语言:javascript
复制
>>> print(Y0_val) # output at t = 0
[[-0.2964572 0.82874775 -0.34216955 -0.75720584 0.19011548] # instance 0
[-0.12842922 0.99981797 0.84704727 -0.99570125 0.38665548] # instance 1
[ 0.04731077 0.99999976 0.99330056 -0.999933 0.55339795] # instance 2
[ 0.70323634 0.99309105 0.99909431 -0.85363263 0.7472108 ]] # instance 3
>>> print(Y1_val) # output at t = 1
[[ 0.51955646 1. 0.99999022 -0.99984968 -0.24616946] # instance 0
[-0.70553327 -0.11918639 0.48885304 0.08917919 -0.26579669] # instance 1
[-0.32477224 0.99996376 0.99933046 -0.99711186 0.10981458] # instance 2
[-0.43738723 0.91517633 0.97817528 -0.91763324 0.11047263]] # instance 3

其实在理解了前两期的内容之后,就会发现这不难,但是当我们要在100个时间点上运行一个RNN的话,这个图将会变得非常大。

下一期,我们将一起学习下如何运用tensorflow的RNN操作来创建RNN网络。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智能算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
批量计算
批量计算(BatchCompute,Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算 Batch 可以根据用户提供的批处理规模,智能地管理作业和调动其所需的最佳资源。有了 Batch 的帮助,您可以将精力集中在如何分析和处理数据结果上。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档