【发布时间】:2018-01-24 08:21:12
【问题描述】:
我想用我预先训练的值在 Tensorflow 中的 BasicLSTMcell 中初始化权重和偏差值(我通过 .npy 得到它们)。但是当我使用get_tensor_by_name 来获取张量时,它似乎只是为我返回了一个副本,并且原始值永远不会改变。我需要你的帮助!
【问题讨论】:
标签: python tensorflow lstm recurrent-neural-network
我想用我预先训练的值在 Tensorflow 中的 BasicLSTMcell 中初始化权重和偏差值(我通过 .npy 得到它们)。但是当我使用get_tensor_by_name 来获取张量时,它似乎只是为我返回了一个副本,并且原始值永远不会改变。我需要你的帮助!
【问题讨论】:
标签: python tensorflow lstm recurrent-neural-network
在第一次迭代中添加一些tf.assign 操作以将您想要的值分配给内部变量。
确保这只发生在第一次迭代中,否则你会覆盖你所做的任何训练。
该单元格有一个名为 get_trainable_variables 的方法,可以根据需要为您提供帮助。
【讨论】:
我猜BasicRNNCell 是太基础了。从BasicRNNCell 接受kernel_initializer 和bias_initializer 创建自己的单元格会更容易。
import tensorflow as tf
from tensorflow.python.ops.rnn_cell_impl import _Linear
class MyNNCell(tf.nn.rnn_cell.BasicRNNCell):
def __init__(self, num_units, activation=None, reuse=None,
kernel_initializer=None,
bias_initializer=None):
super(MyNNCell, self).__init__(num_units, activation, reuse)
self._kernel_initializer = kernel_initializer
self._bias_initializer = bias_initializer
def call(self, inputs, state):
if self._linear is None:
self._linear = _Linear([inputs, state], self._num_units, True,
bias_initializer=self._bias_initializer,
kernel_initializer=self._kernel_initializer)
return super(MyNNCell, self).call(inputs, state)
这可能也有帮助:tf.nn.static_rnn 和 tf.nn.dynamic_rnn 都有 initial_state 参数。它不是设置单元的内核和偏差,而是在第一次调用时它将接收到的状态。因为BasicLSTMcell中的kernel和bias都是用0初始化的,所以是等价的预置cell state的方式。
【讨论】: