tensorflow学习之(十一)RNN+LSTM神经网络的构造
#RNN 循环神经网络 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data tf.set_random_seed(1) # set random seed# 导入数据 mnist = input_data.read_data_sets('MNIST_data', one_hot=True)# hyperparameters lr = 0.001 # learning rate training_iters = 1000000 # train step 上限 循环次数 batch_size = 128 n_inputs = 28 # MNIST data input (img shape: 28*28) 指图片一行有28个像素,RNN每次提取一行 n_steps = 28 # time steps 指图片有28行,所以RNN需要提取28次 n_hidden_units = 128 # neurons in hidden layer n_classes = 10 # MNIST classes (0-9 digits)# x y placeholder x = tf.placeholder(tf.float32, [None, n_steps, n_inputs]) y = tf.placeholder(tf.float32, [None, n_classes])# 对 weights biases 初始值的定义 weights = {# shape (28, 128)'in': tf.Variable(tf.random_normal([n_inputs, n_hidden_units])),# shape (128, 10)'out': tf.Variable(tf.random_normal([n_hidden_units, n_classes])) } biases = {# shape (128, )'in': tf.Variable(tf.constant(0.1, shape=[n_hidden_units, ])),# shape (10, )'out': tf.Variable(tf.constant(0.1, shape=[n_classes, ])) }def RNN(X, weights, biases):#hidden layer for input to cell###############################X(128batch,28steps,28inputs) ==>(128*28,28inputs)X = tf.reshape(X,[-1,n_inputs])#X_in ==> (128batch * 28steps,128hidden)X_in = tf.matmul(X,weights['in'])+biases['in']# X_in ==> (128batch , 28steps,128hidden)X_in = tf.reshape(X_in,[-1,n_steps,n_hidden_units])#cell#############################lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(n_hidden_units, forget_bias=1.0,state_is_tuple=True)# forget_bias=1.0不忘记任何的输入# lstm cell is divided into two parts(c_state,m_state) c_state为主线,m_state为分线# (可以理解为c_state为之前一直留下来的记忆,m_state为当前产生的记忆) _init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32)# 初始化全零 state _init_state会生成一个元组(c_state,m_state)# rnn计算时会保留每一步的计算结果在state中,就是lstm的记忆 outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, X_in, initial_state=_init_state,time_major=False)# time_major=False 因为28steps在第二个维度(128batch , 28steps,128hidden),若在第一个维度(28steps,128batch,128hidden),time_major=True# final_state是最后的state,而outputs是每一步的结果# X_in 为输入层传过来的值[128,28,128]'''BasicLSTMCell代表每一个lstm单元(即每个时刻的处理单元)第一个参数代表单个lstm单元中隐藏层的大小因为每个时刻的输入也是一个向量,所以lstm隐藏层单元不是只有一个。lstm中处理的全部都是向量,没有单独的数字''''''tf.nn.dynamic_rnn(cell,inputs,sequence_length=None,initial_state=None,dtype=None,parallel_iterations=None,swap_memory=False,time_major=False,scope=None)参数说明:tf.nn.dynamic_rnn(lstm_cell, X_in, initial_state=init_state, time_major=False)cell:RNNCell 实例。inputs:RNN输入。如果time_major==False(默认),必须要是形如[batch_size,max_time]的张量,或者这些元素的嵌套元组。 如果time_major == True,必须是形如[max_time, batch_size, ...]的张量, 或者这些元素的嵌套元组. 这也可能是一个满足这个属性的(可能嵌套的)张量元组. 前两个维度必须匹配所有输入,否则排名和其他形状组件可能会有所不同. 在这种情况下,每个时间步的单元输入将复制这些元组的结构,除了时间维(从中获取时间)。 在每个时间步的单元格输入将是张量或(可能嵌套的)张量元组,每个张量元素的尺寸为[batch_size,...]。sequence_length:(可选)一个int32 / int64向量,大小为[batch_size]。 用于在批量元素的序列长度超过时复制通过状态和零输出输出。所以它比正确性更重要。initial_state:(可选)RNN的初始状态。 如果cell.state_size是一个整数,则它必须是形如 [batch_size,cell.state_size]的张量。如果cell.state_size是一个元组,它应该是一个在cell.state_size中具有形状[batch_size,s]的张量元组。dtype:(可选)初始状态和预期输出的数据类型。 如果未提供initial_state或RNN状态具有异构dtype,则为必需。parallel_iterations:(默认:32)。 并行运行的迭代次数。 那些没有任何时间依赖性并且可以并行运行的操作将会是。此参数为空间换取时间。 值>> 1使用更多的内存,但花费的时间更少,而更小的值使用更少的内存,但计算需要更长的时间。swap_memory:透明地交换前向推理中产生的张量,但是需要GPU支持back prop。 这允许对通常不适合单个GPU的RNN进行训练,并且性能损失非常小(或没有)。time_major:输入和输出张量的形状格式,如果time_major == True,则这些张量必须为[max_time,batch_size,depth]。如果为false,则这些张量必须为[batch_size,max_time,depth]。 使用time_major = True可以提高效率,因为它避免了RNN计算开始和结束时的转置。 但是,大多数TensorFlow数据都是批处理主数据,所以默认情况下,此功能接受输入并以批处理主要形式发出输出。scope:用于创建子图的VariableScope; 默认为“rnn”。返回值:output:RNN输出张量。如果time_major == False (default),输出张量形如[batch_size, max_time, cell.output_size]。ast_states是由(c,h)组成的tuple,均为[batch,列数]。'''#hidden layer for output as the final results 输出隐藏层###############################################第一种计算results的方法#使用final_state[1]的原因,final_state包含两个state(c_state,m_state),final_state[1]为分线剧情的结果#results = tf.matmul(final_state[1], weights['out']) + biases['out'] #final_state[1]指分线(m_state)的结果=outputs[-1]#第二种计算results的方法 把 outputs 变成 列表 [(batch, outputs)..] * stepsoutputs = tf.unstack(tf.transpose(outputs, [1, 0, 2]))results = tf.matmul(outputs[-1], weights['out']) + biases['out'] # 选取最后一个 output,为分类结果return resultspred = RNN(x, weights, biases) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=pred)) train_op = tf.train.AdamOptimizer(lr).minimize(cost)correct_pred = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))# init= tf.initialize_all_variables() # tf 马上就要废弃这种写法 # 替换成下面的写法: init = tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)step = 0while step * batch_size < training_iters:batch_xs, batch_ys = mnist.train.next_batch(batch_size)batch_xs = batch_xs.reshape([batch_size, n_steps, n_inputs])sess.run([train_op], feed_dict={x: batch_xs,y: batch_ys,})if step % 20 == 0:print(sess.run(accuracy, feed_dict={x: batch_xs,y: batch_ys,}))step += 1
转载于:https://www.cnblogs.com/Harriett-Lin/p/9597346.html
tensorflow学习之(十一)RNN+LSTM神经网络的构造相关推荐
- 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层
目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...
- 唐宇迪之tensorflow学习笔记项目实战(LSTM情感分析)
我们首先来看看RNN的网络结构,如下图所示 xt 表示第t,t=1,2,3-步(step)的输入 st 为隐藏层的第t步的状态,它是网络的记忆单元. st=f(u×xt+w×st−1) ,其中f一般是 ...
- [深度学习] Pytorch中RNN/LSTM 模型小结
目录 一 Liner 二 RNN 三 LSTM 四 LSTM 代码例子 概念介绍可以参考:[深度学习]理解RNN, GRU, LSTM 网络 Pytorch中所有模型分为构造参数和输入和输出构造参数两 ...
- TensorFlow学习--函数逼近(RBF神经网络)
目录 主体代码参照: 1.RBF网络相关知识 知识概述 2.K-means聚类最优k值的选取 2.1手肘法:SSE(sum of the squared errors,误差平方和) 2.2 轮廓系数法 ...
- TensorFlow学习笔记之六(循环神经网络RNN)
文章目录 1. 循环神经网络简介 1. 循环神经网络简介 循环神经网络源自于1982年由 Saratha Sathasivam提出的霍普菲尔德网络. 循环神经网络的主要用途是处理和预测序列数据,循环神 ...
- 基于RNN(循环神经网络)的北京雾霾天气指数的预测(keras实现RNN,LSTM神经网络算法)
随着科学技术的发展,人们渴望对天气有一定的掌握空间,从古代的夜观天象到如今的气象卫星,人类在对天气的预测上不断的进步与发展,本文将运用循环神经网络实现对天气情况的初步预测,循环神经网络是人工智能领域深 ...
- 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络
TensorFlow直接以官方手册作为切入点,在趣味性和快速性上优势很大,但是对于学习深入理论的理解产生了巨大的阻碍. 在"深入MNIST"这一节中,遇到了卷积神经网络的构建,涉及 ...
- 深度学习框架Tensorflow学习与应用(五卷机神经网络CNN的讲解及CNN解决MNIST分类问题)
(一)作业 # coding: utf-8# In[2]:import tensorflow as tf from tensorflow.examples.tutorials.mnist import ...
- TensorFlow学习笔记之五(卷积神经网络)
文章目录 1. 图片识别问题简介以及经典数据集 1.1 图片识别问题简介 1.2 经典数据集 1. 单通道图片求卷积 1.1 基本的图片求卷积 1.2 填充的图片求卷积 1.3 TensorFlow计 ...
- TensorFlow 学习(十一)—— 正则(regularizer)
正则作用的对象是目标函数,如图对均方误差使用 ℓ2\ell_2 正则: loss = tf.reduce_mean(tf.square(y-y_) + tf.contrib.layers.l2_reg ...
最新文章
- 杜克大学和Facebook联手开发更好的光通信
- 从请求管道深入剖析HttpModule的实现机制,有图有真相
- 微型计算机中PRON是,英语词性英语中的pron指的是什么词性?? – 手机爱问
- 【Android 应用开发】Paint 滤镜原理 之 图像结构 ( 图片文件二进制分析 | PNG文件结构 | 数据块结构 | IHDR 数据块详解 )
- 高防御服务器与高防御IP之间的关系
- java 方法委托托管_Java Web托管选项流程图
- c 结构体的简单封装1
- mac docker 共享_如何在Docker for Mac中加快共享文件访问
- 【收藏】请不要做浮躁的人
- 翁恺老师C语言学习笔记(七)函数
- 有人说清华本科含金量最高,研究生的含金量就低了,这是为什么?
- php商品秒杀时间代码,Thinkphp5+Redis实现商品秒杀代码实例讲解
- 最佳mysql可视化管理工具_2014年十大最佳MySQL可视化管理工具
- 智能优化算法:灰狼优化算法-附代码
- 理正深基坑弹性计算方法_理正深基坑软件应用全参数说明书
- 低代码技巧:甘特图制作步骤
- 网络出现异常(只能上QQ不能上网页)
- android 获取以太网的动态IP地址,子网掩码,DNS地址,网关地址
- ORACLE MERGE INTO语句,unable to get a stable set of rows in the source tables报错解决
- 看完南京前11年房价,我哭了!今年实在太特么狠了
热门文章
- c语言 和 运算顺序,二 如何学习C语言的运算符和运算顺序
- 和ufs_宏旺半导体告诉你手机eMMC和UFS到底是什么意思?有什么区别?
- 区块链 以太坊 Solidity状态变量、局部变量与memory 、storage
- 矿机 矿场 矿池 关系和区别
- Linux keypad 设备树,beaglebone black通过devicetree配置矩阵键盘matrix-keypad
- html选择区间,jQuery可选择区间值代码
- mysql 月份去0_mysql 查询每个月发布的文章数。月份无数据显示为0。如何写SQL呢...
- java webservice 数组参数_LiveBOS Webservice传参类型为list数组
- 不刷新改变/更换URL: pushState + Ajax
- 多个注解可以合并成一个,包括自定义注解