设置表示为 Keras 顺序模型的 RNN 的初始状态
Setting the initial state of an RNN represented as a Keras sequential model
如何设置下面构建的循环神经网络rnn
的初始状态?
from tensorflow.keras.layers import Dense, SimpleRNN
from tensorflow.keras.models import Sequential
rnn = Sequential([SimpleRNN(3), Dense(1)])
我想在用model.fit
拟合模型之前指定第一层的初始状态。
根据tf.keras.layers.RNN documentation,您可以使用参数initial_state
或数值符号指定初始状态] 通过调用函数 reset_states
.
符号规范意味着您需要将初始状态添加为模型的输入。这是我改编自 Keras tests:
的示例
from tensorflow.keras.layers import Dense, SimpleRNN, Input
from tensorflow.keras.models import Model
import numpy as np
import tensorflow as tf
timesteps = 3
embedding_dim = 4
units = 3
inputs = Input((timesteps, embedding_dim))
# initial state as Keras Input
initial_state = Input((units,))
rnn = SimpleRNN(units)
hidden = rnn(inputs, initial_state=initial_state)
output = Dense(1)(hidden)
model = Model([inputs] + [initial_state], output)
model.compile(loss='categorical_crossentropy',
optimizer=tf.compat.v1.train.AdamOptimizer())
定义模型后,您可以按如下方式进行训练:
num_samples = 2
inputs = np.random.random((num_samples, timesteps, embedding_dim))
# random initial state as additional input
some_initial_state = np.random.random((num_samples, units))
targets = np.random.random((num_samples, units))
model.train_on_batch([inputs] + [some_initial_state], targets)
请注意,此方法要求您使用 Functional API。对于顺序模型,您需要使用 stateful RNN,指定 batch_input_shape
,并调用 reset_states
方法:
input_shape = (num_samples, timesteps, embedding_dim)
model = Sequential([
SimpleRNN(3, stateful=True, batch_input_shape=input_shape),
Dense(1)])
some_initial_state = np.random.random((num_samples, units))
rnn = model.layers[0]
rnn.reset_states(states=some_initial_state)
如何设置下面构建的循环神经网络rnn
的初始状态?
from tensorflow.keras.layers import Dense, SimpleRNN
from tensorflow.keras.models import Sequential
rnn = Sequential([SimpleRNN(3), Dense(1)])
我想在用model.fit
拟合模型之前指定第一层的初始状态。
根据tf.keras.layers.RNN documentation,您可以使用参数initial_state
或数值符号指定初始状态] 通过调用函数 reset_states
.
符号规范意味着您需要将初始状态添加为模型的输入。这是我改编自 Keras tests:
的示例from tensorflow.keras.layers import Dense, SimpleRNN, Input
from tensorflow.keras.models import Model
import numpy as np
import tensorflow as tf
timesteps = 3
embedding_dim = 4
units = 3
inputs = Input((timesteps, embedding_dim))
# initial state as Keras Input
initial_state = Input((units,))
rnn = SimpleRNN(units)
hidden = rnn(inputs, initial_state=initial_state)
output = Dense(1)(hidden)
model = Model([inputs] + [initial_state], output)
model.compile(loss='categorical_crossentropy',
optimizer=tf.compat.v1.train.AdamOptimizer())
定义模型后,您可以按如下方式进行训练:
num_samples = 2
inputs = np.random.random((num_samples, timesteps, embedding_dim))
# random initial state as additional input
some_initial_state = np.random.random((num_samples, units))
targets = np.random.random((num_samples, units))
model.train_on_batch([inputs] + [some_initial_state], targets)
请注意,此方法要求您使用 Functional API。对于顺序模型,您需要使用 stateful RNN,指定 batch_input_shape
,并调用 reset_states
方法:
input_shape = (num_samples, timesteps, embedding_dim)
model = Sequential([
SimpleRNN(3, stateful=True, batch_input_shape=input_shape),
Dense(1)])
some_initial_state = np.random.random((num_samples, units))
rnn = model.layers[0]
rnn.reset_states(states=some_initial_state)