先来个简单的多层网络

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. 【转】学习Linux守护进程详细笔记

    [原文]https://www.toutiao.com/i6566814959966093837/ Linux守护进程 一. 守护进程概述 守护进程,也就是通常所说的Daemon进程,是Linux中的 ...

  2. TiDB数据库 mydumper与loader导入数据

    从mysql导出数据最好的方法是使用tidb官方的工具mydumper. 导入tidb最好的方法是使用loader工具,大概19.4G每小时的速度. 详细的步骤可以参考官网:https://pingc ...

  3. Python pandas & numpy 笔记

    记性不好,多记录些常用的东西,真·持续更新中::先列出一些常用的网址: 参考了的 莫烦python pandas DOC numpy DOC matplotlib 常用 习惯上我们如此导入: impo ...

  4. [python] 统计某一路径下所有代码真实行数(空行已被过滤)

      #-*- coding:utf-8 -*- ''' Created on 2018年8月15日 @author: anyd ''' import os list_line = [] filepat ...

  5. 【转】Python操作MongoDB数据库

    前言 MongoDB GUI 工具 PyMongo(同步) Motor(异步) 后记 前言 最近这几天准备介绍一下 Python 与三大数据库的使用,这是第一篇,首先来介绍 MongoDB 吧,,走起 ...

  6. Lr场景设计-hc课堂笔记

    性能测试最基本也是最难的部分:场景设计.瓶颈分析和定位 10个业务10个脚本,每个脚本单独执行:单独场景.10个脚本一起执行:混合场景.10个业务1个脚本:可以设计不同用户登录,分别做不同的操作等场景 ...

  7. linux IP 命令使用举例(转)

    ip 1.作用ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig.route等,使用权限为超级用户.几乎所有的Linux发行版本都支持该命 ...

  8. 使用sysbench 进行msyql oltp压力测试

    安装参考: https://github.com/akopytov/sysbench#linux#参数说明 需要说明的选项: mysql-db=dbtest1a:测试使用的目标数据库,这个库名要事先创 ...

  9. 模拟T1数字number

    那么第一题首先非常水的一道题…… 看一下题 数字(number) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK拥有n个数,这n个数分别是a1,a2,… ...

  10. Android 给TextView中的字体加上“中间线”

    大家都知道在做购物App或者购物网站的时候,商品价格往往会有一个“现价”和“原价”而原价往往会在中间加上一个黑色的横线.便于醒目客户,但是这种效果在App中应该怎样做呢? 废话不多少,直接给大家看代码 ...