【问题标题】:Translating a TensorFlow LSTM into synapticjs将 TensorFlow LSTM 翻译成 synapticjs
【发布时间】:2016-03-23 07:44:58
【问题描述】:

我正在努力在已经训练过的 TensorFlow 基本 LSTM 和可以在浏览器中运行的 javascript 版本之间实现一个接口。问题是,在我读过的所有文献中,LSTM 都被建模为迷你网络(仅使用连接、节点和门),而 TensorFlow 似乎还有很多事情要做。

我的两个问题是:

  1. TensorFlow 模型能否轻松转化为更传统的神经网络结构?

  2. 有没有实用的方法将 TensorFlow 提供的可训练变量映射到这个结构?

我可以从 TensorFlow 中获取“可训练变量”,问题是它们似乎每个 LSTM 节点只有一个偏差值,而我见过的大多数模型都包含记忆单元的多个偏差,输入和输出。

【问题讨论】:

    标签: machine-learning neural-network tensorflow lstm tensorboard


    【解决方案1】:

    在内部,LSTMCell 类将 LSTM 权重存储为一个大矩阵,而不是 8 个较小的矩阵以提高效率。水平和垂直划分它很容易得到更传统的表示。但是,如果您的库进行类似的优化,它可能会更容易、更有效。

    这是BasicLSTMCell的相关代码:

    concat = linear([inputs, h], 4 * self._num_units, True)
    
    # i = input_gate, j = new_input, f = forget_gate, o = output_gate
    i, j, f, o = array_ops.split(1, 4, concat)
    

    linear 函数进行矩阵乘法以将连接的输入和之前的h 状态转换为 4 个[batch_size, self._num_units] 形状的矩阵。线性变换使用您在问题中提到的单个矩阵和偏差变量。然后将结果拆分为 LSTM 转换使用的不同门。

    如果您想明确获得每个门的转换,您可以将该矩阵和偏差拆分为 4 个块。使用 4 或 8 个线性变换从头开始实现它也很容易。

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 2012-10-13
      • 2020-11-17
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2015-09-22
      • 2015-10-11
      相关资源
      最近更新 更多