先来个简单的多层网络

RNN的原理和出现的原因,解决什么场景的什么问题

关于RNN出现的原因,RNN详细的原理,已经有很多博文讲解的非常棒了。

如下:




http://ai.51cto.com/art/201711/559441.htm




更多的例子可以百度了解

为什么我写这篇博客

主要是我从自己学习理解RNN的时候,开始有一些困难,书上讲的也是模模糊糊的,原理讲解的很多,但是代码的关键点描述不太清楚,自己反复揣测以后,终于有了一些理解,记录下来,一方面记录自己的成长过程,另外一方面可以让跟我一样有疑惑的同学可以少走弯路,当然也有可能是错路。

多层网络
x = tf.placeholder(tf.float32,[None,256])
y = tf.placeholder(tf.float32,[None,10]) w1 = tf.Variable(tf.random_normal([256,1024]))
b1 = tf.Variable(tf.zeros([1024])) x1 = tf.nn.relu(tf.multiply(w1,x)+b1) w2 = tf.Variable(tf.random_normal(1024,10))
b2 = tf.Variable(tf.zeros([10]))
pred = tf.nn.softmax(tf.multiply(w2,x1)+b2)
loss = -tf.reduce_sum(pred*tf.log(y))
op = tf.train.GradientDescentOptimizer(0.001).minimize(loss)

在写个简单的RNN网络

import tensorflow as tf

# RNN
batch_size = 5
truncated_series_length = 50000
state_size = 4 x = tf.placeholder(tf.float32,[batch_size,truncated_series_length])
y = tf.placeholder(tf.float32,[batch_size,truncated_series_length]) '''
最关键的点,好多书上没写的,就是这个参数,是参与循环的参数
BP网络中没有这个参数
'''
init_state = tf.placeholder(tf.float32,[batch_size,state_size]) # 把X,Y拆开,我的理解是为了方便看得到循环的时候State是如何参与循环的
xs = tf.unstack(x,axis=1)
ys = tf.unstack(y,axis=1)
current_state = init_state for currentx,currenty in zip(xs,ys): w1 = tf.Variable(tf.random_normal([truncated_series_length+ state_size,truncated_series_length]))
b1 = tf.Variable(tf.zeros([truncated_series_length]))
#这个就是和BP的区别,把循环链接起来
concatedx = tf.concat(xs,current_state)
y1 = tf.nn.tanh(tf.multiply(w1,x) + b1) #区别
current_state = y1
#注释掉这一层,让看上去更容易理解为什么叫做循环网络
#w2= tf.Variable(tf.random_normal([truncated_series_length,truncated_series_length]))
#b2 = tf.Variable(tf.zeros([truncated_series_length]))
#y2 = tf.multiply(w2,y1)+b2 loss = -tf.reduce_sum(y1*tf.log(currenty))

个人感觉两个的主要区别在于BP网络中每个参数每一步都是独立的,和下一个样本之间不相互依赖,而RNN有一个参数参与循环。另外RNN的一些参数的设置,我还不是太熟悉,还有待于深入。另外很多书上讲解Rnn用的是tf.contrib.layers或tf.contrib.cnn的类库去描绘,不是太利于理解底层的东西。所以我选择了用这种写法去表述。不对之处请多多指教。

简单的RNN和BP多层网络之间的区别的更多相关文章

  1. docker容器中用户自定bridge网络与默认bridge网络之间的区别

    转载 https://blog.csdn.net/dkfajsldfsdfsd/article/details/79959534

  2. 深度学习原理与框架-递归神经网络-RNN网络基本框架(代码?) 1.rnn.LSTMCell(生成单层LSTM) 2.rnn.DropoutWrapper(对rnn进行dropout操作) 3.tf.contrib.rnn.MultiRNNCell(堆叠多层LSTM) 4.mlstm_cell.zero_state(state初始化) 5.mlstm_cell(进行LSTM求解)

    问题:LSTM的输出值output和state是否是一样的 1. rnn.LSTMCell(num_hidden, reuse=tf.get_variable_scope().reuse)  # 构建 ...

  3. Deep Learning(深度学习)整理,RNN,CNN,BP

     申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎 ...

  4. 神经网络:多层网络与C++实现

    相关源码可参考最新的实现:https://github.com/ronnyyoung/EasyML ,中的neural_network模块,后持续更新,包括加入CNN的结构. 一.引言 在前一篇关于神 ...

  5. Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量

    Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...

  6. Unix I/O--输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程

    输入/输出(I/O) : 是指主存和外部设备(如磁盘,终端,网络)之间拷贝数据过程 https://www.bbsmax.com/A/o75N88ZxzW/ 10.1 Unix I/O 一个Unix ...

  7. 多层界面之间显示与隐藏tabBar

    IOS中多层界面之间显示与隐藏tabBar? 在做项目的时候,遇到了一个难题,使用hidesBottomWhenPushed=YES属性设置,可以让本级界面及其以后界面都隐藏,但是根据项目 需求,在第 ...

  8. 网络篇:linux下select、poll、epoll之间的区别总结

    select.poll.epoll之间的区别总结 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪 ...

  9. GBK、GB2312、iso-8859-1之间的区别

    转自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政 ...

随机推荐

  1. Django2.0路由层-URLconf

    目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...

  2. 解决The valid characters are defined in RFC 7230 and RFC 3986错误问题

    分析原因: 导致上述问题是因为tomcat自tomcat 8.0.35版本之后对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请 ...

  3. BZOJ5018:[SNOI2017]英雄联盟(背包DP)

    Description 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤! 小皮球只会玩N个英雄 ...

  4. 【FRM123】Wrong Way Risk

    https://www.investopedia.com/articles/investing/102015/introduction-wrong-way-risk.asp https://www.r ...

  5. java.util.zip.ZipException: duplicate entry(重复依赖多版本的类库)

    同步SVN仓库中的代码,更新后,运行项目,出现如下错误: com.android.build.api.transform.TransformException: java.util.zip.ZipEx ...

  6. JAVA框架:hibernate(二)

    一.事务操作. 代码: @Test public void tr_Up(){ Session session=hibernateUtils.getSession(); Transaction tran ...

  7. 例子:照片的OCR识别

    来自ng的ml-003中 18_XVIII._Application_Example-_Photo_OCR 这是ng2013年在coursera上最后的一课了.这一系列的几个视频还是相比前面有些难懂, ...

  8. mysql的常用优化知识

    索引类型:主键索引,唯一索引,联合索引,普通索引,全文索引 建立索引: create index index_name on table(field_name); 删除索引: drop index i ...

  9. 降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)

    今天用此函数做方程求解时发现有误,特此更正: /// <summary> /// 降阶法计算行列式 /// </summary> /// <param name=&quo ...

  10. android so壳入口浅析

    本文转自http://www.9hao.info/pages/2014/08/android-soke-ru-kou-q 前言   开年来开始接触一些加固样本,基本都对了so进行了处理,拖入ida一看 ...