【发布时间】:2021-07-06 00:25:41
【问题描述】:
我想查看任意 Keras 模型使用的初始条件。在下面的示例中,我在第一批中将第一个单元的初始状态设置为 0.123。但是当我调用rnn(...) 函数时的输出在一个时间步之后开始(当单元活动由于一的偏差而处于 1.123 时)并且不返回初始条件。
有没有办法让它显示初始状态?
示例代码如下:
SEED=42
tf.random.set_seed(SEED)
np.random.seed(SEED)
timesteps = 3
embedding_dim = 4
units = 2
num_samples = 5
input_shape = (num_samples, timesteps, embedding_dim)
model = Sequential([
SimpleRNN(units, stateful=True, batch_input_shape=input_shape, return_sequences=True, activation="linear",
recurrent_initializer="identity", bias_initializer="ones"),
Dense(1)])
some_initial_state = np.ones((num_samples, units))
some_initial_state[0,0] = 0.123
rnn = model.layers[0]
rnn.reset_states(states=some_initial_state)
some_initial_state, rnn(np.zeros((num_samples, timesteps, embedding_dim)))
谁的输出是:
(array([[0.123, 1. ],
[1. , 1. ],
[1. , 1. ],
[1. , 1. ],
[1. , 1. ]]),
<tf.Tensor: shape=(5, 3, 2), dtype=float32, numpy=
array([[[1.123 , 2. ],
[2.1230001, 3. ],
[3.1230001, 4. ]],
[[2. , 2. ],
[3. , 3. ],
[4. , 4. ]],
[[2. , 2. ],
[3. , 3. ],
[4. , 4. ]],
[[2. , 2. ],
[3. , 3. ],
[4. , 4. ]],
[[2. , 2. ],
[3. , 3. ],
[4. , 4. ]]], dtype=float32)>)
请注意,我使用rnn.reset_states(...) 设置网络的初始状态,如Setting the initial state of an RNN represented as a Keras sequential model 中所述
【问题讨论】:
-
我认为 Keras 将零向量初始化为
initial_state。见源代码中的this方法。 -
嗨,@ShubhamPanchal,是的,通常是这样。但我使用
rnn.reset_states(...)进行初始化,正如另一个问题stackoverflow.com/questions/63044445/… 中所解释的那样 -
初始化为非零值,在
some_initial_state中指定
标签: tensorflow keras neural-network recurrent-neural-network