我正在努力实现已经经过培训的TensorFlow基本LSTM与可以在浏览器中运行的javascript版本之间的接口(interface)。问题在于,在我已阅读的所有文献中,LSTM都被建模为小型网络(仅使用连接,节点和门),并且TensorFlow似乎还有很多事情要做。

我有两个问题:

  • TensorFlow模型可以轻松转换为更传统的神经网络结构吗?
  • 是否存在一种实用的方法来将TensorFlow提供给您的可训练变量映射到此结构?

  • 我可以从TensorFlow中获得``可训练变量'',问题是每个LSTM节点它们似乎只有一个偏差值,我见过的大多数模型都将包含针对存储单元,输入和输出的多个偏差。输出。

    最佳答案

    在内部,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状态转换为[batch_size, self._num_units]形状的4个矩阵。线性变换使用单个矩阵和您在问题中引用的偏差变量。然后将结果分为LSTM转换使用的不同门。

    如果您想显式地获取每个门的变换,则可以将该矩阵拆分并偏置为4个块。使用4或8个线性变换从头开始实现它也非常容易。

    关于machine-learning - 将TensorFlow LSTM转换为synapticjs,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34324449/

    10-12 23:57