Tensorflow:如何使用dynamic_rnn从LSTMCell获取中间细胞状态(c)?

2024-03-29

默认情况下,函数dynamic_rnn仅输出隐藏状态(称为m)对于每个时间点可以通过如下方式获得:

cell = tf.contrib.rnn.LSTMCell(100)
rnn_outputs, _ = tf.nn.dynamic_rnn(cell,
                                   inputs=inputs,
                                   sequence_length=sequence_lengths,
                                   dtype=tf.float32)

有没有办法获得中间(不是最终)细胞状态(c) 此外?

A tensorflow贡献者mentions https://github.com/tensorflow/tensorflow/pull/9995#issuecomment-343641550可以使用单元格包装器来完成:

class Wrapper(tf.nn.rnn_cell.RNNCell):
  def __init__(self, inner_cell):
     super(Wrapper, self).__init__()
     self._inner_cell = inner_cell
  @property
  def state_size(self):
     return self._inner_cell.state_size
  @property
  def output_size(self):
    return (self._inner_cell.state_size, self._inner_cell.output_size)
  def call(self, input, state)
    output, next_state = self._inner_cell(input, state)
    emit_output = (next_state, output)
    return emit_output, next_state

然而,它似乎不起作用。有任何想法吗?


建议的解决方案对我有用,但是Layer.call方法规范更通用,因此以下Wrapper应该对 API 更改更加稳健。你这个:

class Wrapper(tf.nn.rnn_cell.RNNCell):
  def __init__(self, inner_cell):
     super(Wrapper, self).__init__()
     self._inner_cell = inner_cell

  @property
  def state_size(self):
     return self._inner_cell.state_size

  @property
  def output_size(self):
    return (self._inner_cell.state_size, self._inner_cell.output_size)

  def call(self, input, *args, **kwargs):
    output, next_state = self._inner_cell(input, *args, **kwargs)
    emit_output = (next_state, output)
    return emit_output, next_state

这是测试:

n_steps = 2
n_inputs = 3
n_neurons = 5

X = tf.placeholder(dtype=tf.float32, shape=[None, n_steps, n_inputs])
basic_cell = Wrapper(tf.nn.rnn_cell.LSTMCell(num_units=n_neurons, state_is_tuple=False))
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)
print(outputs, states)

X_batch = np.array([
  # t = 0      t = 1
  [[0, 1, 2], [9, 8, 7]], # instance 0
  [[3, 4, 5], [0, 0, 0]], # instance 1
  [[6, 7, 8], [6, 5, 4]], # instance 2
  [[9, 0, 1], [3, 2, 1]], # instance 3
])

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  outputs_val = outputs[0].eval(feed_dict={X: X_batch})
  print(outputs_val)

outputs是元组(?, 2, 10) and (?, 2, 5)张量,都是 LSTM 状态和输出。请注意,我使用的是“毕业”版本LSTMCell, from tf.nn.rnn_cell包,不tf.contrib.rnn。另请注意state_is_tuple=True以避免处理LSTMStateTuple.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow:如何使用dynamic_rnn从LSTMCell获取中间细胞状态(c)? 的相关文章

  • 如何在后台运行python程序以保持活动窗口相同

    我编写了一个程序 可以将前景窗口更改为显示器尺寸的 85 并且要成功运行 前景窗口需要保持不变 我已将 python 脚本 pyw 放入批处理文件 运行 pythonw 并在桌面上创建了批处理文件的快捷方式 并提供了快速运行它的快捷方式 我
  • 如何使用scrapy抓取xml url

    你好 我正在使用 scrapy 来抓取 xml url 假设下面是我的 Spider py 代码 class TestSpider BaseSpider name test allowed domains www example com s
  • 如何使用Python在没有窗口的情况下在屏幕上显示文本

    问题 我需要在没有窗口的情况下直接将文本写入屏幕 文本需要显示在所有其他窗口和全屏应用程序之上 并且不应以任何方式单击或交互 Example The text doesn t need to have a transparent backg
  • SQLAlchemy+pymysql 错误:sqlalchemy.util.queue.Empty

    尝试使用 Eclispse 在 Ubuntu 上运行 Python 2 SQLAlchemy 0 8 和 MySQL5 2 但我不断收到以下错误 我使用 pymysql 实际上是 pymysql3 引擎 模块监视器 from sqlalch
  • Scrapy 仅抓取每个页面的第一个结果

    我目前正在尝试运行以下代码 但它只保留每个页面的第一个结果 知道可能是什么问题吗 from scrapy contrib spiders import CrawlSpider Rule from scrapy contrib linkext
  • Flask-Mail - 基于 Flask-Cookiecutter 异步发送电子邮件

    我的烧瓶项目基于烧瓶饼干切割机 https github com sloria cookiecutter flask我需要异步发送电子邮件 发送电子邮件的功能由以下配置米格尔的教程 https blog miguelgrinberg com
  • 如何在海龟图形中将多个按键绑定在一起?

    我正在尝试制作一个连接点的 python 游戏 我希望游戏记录 2 次按钮按下操作 示例 如果用户按向上和向右箭头键 乌龟将向东北方向移动 45 度 这是我的代码 import turtle flynn turtle Turtle win
  • 如何从分组数据创建直方图

    我正在尝试根据 pandas 中的分组数据创建直方图 到目前为止 我已经能够创建标准线图 但我不知道如何做同样的事情来获取直方图 条形图 我想获得泰坦尼克号事故中幸存者和未幸存者的 2 个年龄直方图 看看年龄分布是否存在差异 来源数据 ht
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 构建一个简单的解析器,能够使用 PyParse 解析不同的日期格式

    我正在构建一个简单的解析器 它接受如下查询 显示 fizi 从 2010 年 1 月 1 日到 2006 年 2 月 11 日的提交 到目前为止我有 class QueryParser object def parser self stmn
  • 用于 OAuth 身份验证的 WSGI 中间件

    我使用构建了一个非常小的网络应用程序Flask http flask pocoo org 现在我想向网站添加非常基本的身份验证 我不需要授权 由于 Flask 不支持开箱即用的 auth auth 我想插入 WSGI 中间件来完成这项工作
  • 为什么类型提示“float”接受“int”,而它甚至不是子类?

    一方面 我了解到数字可以int or float应将类型注释为float 来源 PEP 484 类型提示 https www python org dev peps pep 0484 the numeric tower and 这个计算器问
  • Python range() 和 zip() 对象类型

    我了解功能如何range and zip 可以在 for 循环中使用 然而我期望range 输出一个列表 很像seq在 Unix shell 中 如果我运行以下代码 a range 10 print a 输出是range 10 表明它不是一
  • 在python中打开带有重音符号的文本文件

    我尝试使用 Python 2 7 打开法语文本文件 我使用了命令 f open textfr r 但是当我使用 f read 我失去了重音字符 我明白了u J xc3 xa9tais xc3 xa0巴黎而不是J tais 巴黎等 当在lin
  • Tensorflow Hub - 获取模型的输入形状和问题域?

    我正在使用最新版本的tensorflow hub 想知道如何获取有关模型的预期输入形状以及模型属于什么类型的集合的信息 例如 有没有办法以这种方式在 Python 中加载模型后获取有关预期图像形状的信息 model hub load htt
  • 为什么你可以在字符串上重载 __radd__ 而不是 __rmod__ ?

    在Python中 您可以覆盖右 和左 加法运算符
  • 如何配置应用程序中的所有记录器

    Python 的日志记录模块允许模块或类定义自己的记录器 不同的记录器可以有不同的处理程序 其中一些可能选择记录到文件 而另一些则选择记录到标准输出 现在 我的应用程序使用其中几个模块 每个模块都有自己的记录器 这些记录器具有各种处理程序
  • 梯度下降有哪些替代方案?

    梯度下降存在局部极小值问题 我们需要运行梯度下降指数次来找到全局最小值 谁能告诉我梯度下降的任何替代方案及其优缺点 Thanks See 我的硕士论文 https arxiv org pdf 1707 09725 pdf page 96对于
  • ValueError:对于optimize.curve_fit中所需的数组来说对象太深

    我正在尝试拟合化学系统中四个变量 A B C D 的人口增长和衰退的动力学模型 我正在尝试求解以下一组方程 我已将其以矩阵形式附加 方程的矩阵形式 https i stack imgur com ysEdZ png 其中 t 是时间步长 k
  • 类型提示:解决循环依赖

    以下产生NameError name Client is not defined 我该如何解决 class Server def register client self client Client pass class Client de

随机推荐