tf.contrib.rnn.static_rnn与tf.nn.dynamic_rnn区别

tf.contrib.rnn.static_rnn与tf.nn.dynamic_rnn区别

https://blog.csdn.net/u014365862/article/details/78238807

MachineLP的Github(欢迎follow):https://github.com/MachineLP

我的GitHub:https://github.com/MachineLP/train_cnn-rnn-attention 自己搭建的一个框架,包含模型有:vgg(vgg16,vgg19), resnet(resnet_v2_50,resnet_v2_101,resnet_v2_152), inception_v4, inception_resnet_v2等。

  1. chunk_size = 256

  2.  

    chunk_n = 160

  3.  

    rnn_size = 256

  4.  

    num_layers = 2

  5.  

    n_output_layer = MAX_CAPTCHA*CHAR_SET_LEN # 输出层

单层rnn:

tf.contrib.rnn.static_rnn:

输入:[步长,batch,input]

输出:[n_steps,batch,n_hidden]

还有rnn中加dropout

  1. def recurrent_neural_network(data):

  2.  

  3.  

    data = tf.reshape(data, [-1, chunk_n, chunk_size])

  4.  

    data = tf.transpose(data, [1,0,2])

  5.  

    data = tf.reshape(data, [-1, chunk_size])

  6.  

    data = tf.split(data,chunk_n)

  7.  

  8.  

    # 只用RNN

  9.  

    layer = {‘w_‘:tf.Variable(tf.random_normal([rnn_size, n_output_layer])), ‘b_‘:tf.Variable(tf.random_normal([n_output_layer]))}

  10.  

    lstm_cell = tf.contrib.rnn.BasicLSTMCell(rnn_size)

  11.  

    outputs, status = tf.contrib.rnn.static_rnn(lstm_cell, data, dtype=tf.float32)

  12.  

    # outputs = tf.transpose(outputs, [1,0,2])

  13.  

    # outputs = tf.reshape(outputs, [-1, chunk_n*rnn_size])

  14.  

    ouput = tf.add(tf.matmul(outputs[-1], layer[‘w_‘]), layer[‘b_‘])

  15.  

  16.  

    return ouput

多层rnn:

tf.nn.dynamic_rnn:

输入:[batch,步长,input] 
输出:[batch,n_steps,n_hidden] 
所以我们需要tf.transpose(outputs, [1, 0, 2]),这样就可以取到最后一步的output

  1. def recurrent_neural_network(data):

  2.  

    # [batch,chunk_n,input]

  3.  

    data = tf.reshape(data, [-1, chunk_n, chunk_size])

  4.  

    #data = tf.transpose(data, [1,0,2])

  5.  

    #data = tf.reshape(data, [-1, chunk_size])

  6.  

    #data = tf.split(data,chunk_n)

  7.  

  8.  

    # 只用RNN

  9.  

    layer = {‘w_‘:tf.Variable(tf.random_normal([rnn_size, n_output_layer])), ‘b_‘:tf.Variable(tf.random_normal([n_output_layer]))}

  10.  

    #1

  11.  

    # lstm_cell1 = tf.contrib.rnn.BasicLSTMCell(rnn_size)

  12.  

    # outputs1, status1 = tf.contrib.rnn.static_rnn(lstm_cell1, data, dtype=tf.float32)

  13.  

  14.  

    def lstm_cell():

  15.  

    return tf.contrib.rnn.LSTMCell(rnn_size)

  16.  

    def attn_cell():

  17.  

    return tf.contrib.rnn.DropoutWrapper(lstm_cell(), output_keep_prob=keep_prob)

  18.  

    # stack = tf.contrib.rnn.MultiRNNCell([attn_cell() for _ in range(0, num_layers)], state_is_tuple=True)

  19.  

    stack = tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(0, num_layers)], state_is_tuple=True)

  20.  

    # outputs, _ = tf.nn.dynamic_rnn(stack, data, seq_len, dtype=tf.float32)

  21.  

    outputs, _ = tf.nn.dynamic_rnn(stack, data, dtype=tf.float32)

  22.  

    # [batch,chunk_n,rnn_size] -> [chunk_n,batch,rnn_size]

  23.  

    outputs = tf.transpose(outputs, (1, 0, 2))

  24.  

  25.  

    ouput = tf.add(tf.matmul(outputs[-1], layer[‘w_‘]), layer[‘b_‘])

  26.  

  27.  

    return ouput

原文地址:https://www.cnblogs.com/DjangoBlog/p/9542571.html

时间: 2024-07-30 07:08:15

tf.contrib.rnn.static_rnn与tf.nn.dynamic_rnn区别的相关文章

深度学习原理与框架-递归神经网络-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)  # 构建单层的LSTM网络 参数说明:num_hidden表示隐藏层的个数,reuse表示LSTM的参数进行复用 2.rnn.DropoutWrapper(cell, output_keep_prob=keep_prob) # 表示对rnn的输出层进行dropout 参数说明:cell表示单层的lstm,o

关于tensorflow里面的tf.contrib.rnn.BasicLSTMCell 中num_units参数问题

这里的num_units参数并不是指这一层油多少个相互独立的时序lstm,而是lstm单元内部的几个门的参数,这几个门其实内部是一个神经网络,答案来自知乎: class TRNNConfig(object): """RNN配置参数""" # 模型参数 embedding_dim = 100 # 词向量维度 seq_length = 100 # 序列长度 num_classes = 2 # 类别数 vocab_size = 10000 # 词汇表达

TF之RNN:实现利用scope.reuse_variables()告诉TF想重复利用RNN的参数的案例—Jason niu

import tensorflow as tf # 22 scope (name_scope/variable_scope) from __future__ import print_function class TrainConfig: batch_size = 20 time_steps = 20 input_size = 10 output_size = 2 cell_size = 11 learning_rate = 0.01 class TestConfig(TrainConfig):

ValueError: Attempt to reuse RNNCell <tensorflow.contrib.rnn.python.ops.core_rnn_cell_impl.BasicLSTMCell object at 0x7f1a3c448390> with a different variable scope than its first use.解决方法

最近在做生成电视剧本小项目,遇到以下报错 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-16-a2d9a7091ca5> in <module>() 10 input_data_shape = tf.shape(input_text) 11 cell, ini

深度学习原理与框架-递归神经网络-RNN_exmaple(代码) 1.rnn.BasicLSTMCell(构造基本网络) 2.tf.nn.dynamic_rnn(执行rnn网络) 3.tf.expand_dim(增加输入数据的维度) 4.tf.tile(在某个维度上按照倍数进行平铺迭代) 5.tf.squeeze(去除维度上为1的维度)

1. rnn.BasicLSTMCell(num_hidden) #  构造单层的lstm网络结构 参数说明:num_hidden表示隐藏层的个数 2.tf.nn.dynamic_rnn(cell, self.x, tf.float32) # 执行lstm网络,获得state和outputs 参数说明:cell表示实例化的rnn网络,self.x表示输入层,tf.float32表示类型 3. tf.expand_dim(self.w, axis=0) 对数据增加一个维度 参数说明:self.w表

TensorFlow中的L2正则化函数:tf.nn.l2_loss()与tf.contrib.layers.l2_regularizerd()的用法与异同

tf.nn.l2_loss()与tf.contrib.layers.l2_regularizerd()都是TensorFlow中的L2正则化函数,tf.contrib.layers.l2_regularizerd()函数在tf 2.x版本中被弃用了. 两者都能用来L2正则化处理,但运算有一点不同. import tensorflow as tf sess = InteractiveSession() a = tf.constant([1, 2, 3], dtype=tf.float32) b =

TF之RNN:matplotlib动态演示之基于顺序的RNN回归案例实现高效学习逐步逼近余弦曲线—Jason niu

import tensorflow as tf import numpy as np import matplotlib.pyplot as plt BATCH_START = 0 TIME_STEPS = 20 BATCH_SIZE = 50 INPUT_SIZE = 1 OUTPUT_SIZE = 1 CELL_SIZE = 10 LR = 0.006 BATCH_START_TEST = 0 def get_batch(): global BATCH_START, TIME_STEPS #

tf.contrib.slim的介绍

本文主要参考博客:博客连接 前言基础: 验证本地的tf.contrib.slim模块是否有效: 1 python -c "import tensorflow.contrib.slim as slim;eval=slim.evaluation.evaluate_once" 下载models模块: 下载连接.下载后解压到你设定的文件夹,笔者解压到"E:\TENSORFLOW\models" 找到并且打开文件夹"E:\TENSORFLOW\models\rese

学习笔记TF044:TF.Contrib组件、统计分布、Layer、性能分析器tfprof

TF.Contrib,开源社区贡献,新功能,内外部测试,根据反馈意见改进性能,改善API友好度,API稳定后,移到TensorFlow核心模块.生产代码,以最新官方教程和API指南参考. 统计分布.TF.contrib.ditributions模块,Bernoulli.Beta.Binomial.Gamma.Ecponential.Normal.Poisson.Uniform等统计分布,统计研究.应用中常用,各种统计.机器学习模型基石,概率模型.图形模型依赖. 每个不同统计分布不同特征.函数,同