美文网首页
Keras_rnn以及多层rnn

Keras_rnn以及多层rnn

作者: 苟且偷生小屁屁 | 来源:发表于2017-10-17 15:54 被阅读0次
    图片.png
    • RNN的X输入是分TIME_STEPS和INPUT_SIZE两部分的, 所以X的输入是有时序关系的, 这里的时序和RNN的时序有什么区别?
    • 答案是:
    1. X的TIME_STEPS指的是单个X的输入,例如X_t,它本身就是一个时序的输入,单位时间,X_t只能输入一个序列的INPUT_SIZE,并且X_t是有INPUT_SIZE个这样的序列组成的.(这样其实就跟CNN的图像序列从表面上看没有什么不同了,只是CNN更关注像素点之间的空间关系,而RNN更关注输入之间的时序关系)
    2. 真正的时序是忘记,记忆门,也就是一个单元的RNN或者更多的时候我们将其称为一个CELL才是实际的时间流,即S_t-1, S_t, S_t+1,这里包含有一种选择记忆,选择忘记的机制(LSTM),或者更多的时候我们也可以看做是隐藏层神经元的个数
    • SimpleRNN层
    keras.layers.recurrent.SimpleRNN(units, activation='tanh', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0)
    

    units:输出维度

    activation:激活函数,为预定义的激活函数名(参考激活函数)

    use_bias: 布尔值,是否使用偏置项

    kernel_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

    recurrent_initializer:循环核的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

    bias_initializer:权值初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

    kernel_regularizer:施加在权重上的正则项,为Regularizer对象

    bias_regularizer:施加在偏置向量上的正则项,为Regularizer对象

    recurrent_regularizer:施加在循环核上的正则项,为Regularizer对象

    activity_regularizer:施加在输出上的正则项,为Regularizer对象

    kernel_constraints:施加在权重上的约束项,为Constraints对象

    recurrent_constraints:施加在循环核上的约束项,为Constraints对象

    bias_constraints:施加在偏置上的约束项,为Constraints对象

    dropout:0~1之间的浮点数,控制输入线性变换的神经元断开比例

    recurrent_dropout:0~1之间的浮点数,控制循环状态的线性变换的神经元断开比例

    例子:

    # as the first layer in a Sequential model
    model = Sequential()
    model.add(LSTM(32, input_shape=(10, 64)))
    # now model.output_shape == (None, 32)
    # note: `None` is the batch dimension.
    

    这种写法为标准写法, input_shape=(序列的个数,序列的维度),只有第一层输入要求指定输入的维度.

    # the following is identical:
    model = Sequential()
    model.add(LSTM(32, input_dim=64, input_length=10))
    

    这是分开写的方法,
    LSTM(32,input_dim=64(这是序列的维度),input_length = 10(这是有多少段序列))

    # for subsequent layers, no need to specify the input size:
             model.add(LSTM(16))
    

    这是最简单的写法,从第二层往后都可以这么写

    # to stack recurrent layers, you must use return_sequences=True
    # on any recurrent layer that feeds into another recurrent layer.
    # note that you only need to specify the input size on the first layer.
    model = Sequential()
    model.add(LSTM(64, input_dim=64, input_length=10, return_sequences=True))
    model.add(LSTM(32, return_sequences=True))
    model.add(LSTM(10))
    

    为了堆叠lstm获得更好的结果,希望能够将多个lstm叠加在一起,相当于多个隐藏层
    关键在于

    return_sequences=(默认是False) True
    

    若为True则返回整个序列,否则仅返回输出序列的最后一个输出.
    即如果是False则只有最后一个序列的结果输出,这样就少了input_length这一维,如果要堆叠LSTM,则必须将return_sequences设置为True

    相关文章

      网友评论

          本文标题:Keras_rnn以及多层rnn

          本文链接:https://www.haomeiwen.com/subject/cejluxtx.html