我正在努力实现已经经过培训的TensorFlow基本LSTM与可以在浏览器中运行的javascript版本之间的接口(interface)。问题在于,在我已阅读的所有文献中,LSTM都被建模为小型网络(仅使用连接,节点和门),并且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/