【问题标题】:Setting the initial state of an RNN represented as a Keras sequential model设置表示为 Keras 序列模型的 RNN 的初始状态
【发布时间】:2020-11-12 14:24:37
【问题描述】:

如何设置下面构造的循环神经网络rnn初始状态

from tensorflow.keras.layers import Dense, SimpleRNN
from tensorflow.keras.models import Sequential

rnn = Sequential([SimpleRNN(3), Dense(1)])

我想在用model.fit 拟合模型之前指定第一层的初始状态

【问题讨论】:

    标签: python tensorflow keras neural-network recurrent-neural-network


    【解决方案1】:

    根据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。对于顺序模型,您需要使用 有状态 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多