精华内容
下载资源
问答
  • LSTM参数计算

    2020-07-13 16:28:08
    LSTM参数计算LSTM结构输入输出结构门结构参数计算 LSTM结构 输入输出结构 在n时刻 LSTM的输入有三个: 1.当前时刻网络的输入值Xt; 2.上一时刻LSTM的输出值ht-1; 3.上一时刻的单元状态Ct-1。 LSTM的输出有两个: 1...

    LSTM结构

    在这里插入图片描述

    输入输出结构

    在n时刻
    LSTM的输入有三个:
    1.当前时刻网络的输入值Xt;
    2.上一时刻LSTM的输出值ht-1;
    3.上一时刻的单元状态Ct-1。

    LSTM的输出有两个:
    1.当前时刻LSTM输出值ht;
    2.当前时刻的单元状态Ct。

    门结构

    门有三类:忘记门,输入门,输出门。
    1.忘记门:以一定的概率控制是否遗忘上一层的隐藏细胞状态;
    在这里插入图片描述
    2.输入门:负责处理当前序列位置的输入,更新细胞状态;
    在这里插入图片描述
    在这里插入图片描述
    3.输出门:决定输出什么。
    在这里插入图片描述

    参数计算

    假设输入为:

    TIME_STEPS = 28		# 时间步
    INPUT_SIZE = 28		# 每个时间步的特征长度m
    CELL_SIZE = 100		# 隐藏神经元个数n
    OUTPUT_SIZE = 10	# 输出长度
    inputs = Input(shape=[TIME_STEPS,INPUT_SIZE])
    

    LSTM:

    x = LSTM(CELL_SIZE, input_shape = (TIME_STEPS,INPUT_SIZE), return_sequences=False)(inputs)
    

    输出:

    x = Dense(OUTPUT_SIZE)(x)
    x = Activation("softmax")(x)
    model = Model(inputs,x)
    

    网络参数:

    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_1 (InputLayer)         (None, 28, 28)            0         
    _________________________________________________________________
    lstm_1 (LSTM)                (None, 100)               51600     
    _________________________________________________________________
    dense_1 (Dense)              (None, 10)                1010      
    _________________________________________________________________
    activation_1 (Activation)    (None, 10)                0         
    =================================================================
    Total params: 52,610
    Trainable params: 52,610
    Non-trainable params: 0
    

    其中:
    总参数 = LSTM层 + Dense层 = 51600 + 1010 = 52610
    LSTM层:51600 = 4 x ((input_size+cell_size) x cell_size+cell_size) = 4x((28+100)x100+100)
    Dense层:1010 = 100 x 10 + 10

    展开全文
  • 今天小编就为大家分享一篇基于pytorch的lstm参数使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • pytorch的lstm参数系列

    2021-05-13 20:34:48
    文章目录抄1cani抄2canci 抄1 cani Pytorch中RNN LSTM的input(重点理解batch_size/time_steps) 抄2 canci pytorch中lstm参数与案例理解

    pytorch的lstm居然多了一个batchsize

    • input参数居然要batchsize这个参数啊!

    基于pytorch的RNN各参数含义 实例

    cani

    Pytorch中RNN LSTM的input(重点理解batch_size/time_steps)

    • 建立时序模型时,若用keras,我们在Input时就会在shape内设置好sequence_length(后面均用seq_len表示),接着便可在自定义的data_generator内进行个性化的使用。
    • 这个值同时也就是time_steps,它代表了RNN内部的cell的数量,有点懵的朋友可以再去看看RNN的相关内容:

    • 所以设定好这个值是很重要的事情,它和batch_size,feature_dimensions(词向量时就是embedding_size了)构成了我们Input的三大维度,无论是keras/tensorflow,亦或是Pytorch,本质上都是这样。

    • 牵涉到这个问题是听说Pytorch自由度更高,最近在做实验的时候开始尝用Pytorch了,写完代码跑通后,过了段时间才意识到,
    • 好像没用到seq_len这个参数,果然是Keras用多了的后遗症?
    • 检查一下才发现,DataLoader生成数据的时候,默认生成(batch_size, 1, feature_dims)。(这里无视了batch_size和seq_len的顺序,在建立模型的时候,比如nn.LSTM有个batch_first的参数,它决定了谁前谁后,但这不是我们这里讨论的重点)。

    • 所以我们的seq_len/time_steps被默认成1,这是在用Pytorch时易发生的问题
    • 由于Keras先天的接口设置在Input时就让我们无脑设置seq_len,这反而不会成为我们在使用Keras时发生的问题,
    • Pytorch没有让我们在哪里设置这个参数,所以一不小心可能就忽视了。

    cani

    抄2

    canci

    展开全文
  • 神经网络学习小记录36——Keras实现LSTM学习前言什么是LSTM1、LSTM的结构2、LSTM独特的门结构3、LSTM参数量计算a、遗忘门b、输入门c、输出门d、全部参数量在Keras中实现LSTM实现代码 学习前言 我死了我死了我死了! ...

    学习前言

    我死了我死了我死了!
    在这里插入图片描述

    什么是LSTM

    1、LSTM的结构

    在这里插入图片描述
    我们可以看出,在n时刻,LSTM的输入有三个:

    • 当前时刻网络的输入值Xt
    • 上一时刻LSTM的输出值ht-1
    • 上一时刻的单元状态Ct-1

    LSTM的输出有两个:

    • 当前时刻LSTM输出值ht
    • 当前时刻的单元状态Ct

    2、LSTM独特的门结构

    LSTM用两个门来控制单元状态cn的内容:

    • 遗忘门(forget gate),它决定了上一时刻的单元状态cn-1有多少保留到当前时刻;
    • 输入门(input gate),它决定了当前时刻网络的输入c’n有多少保存到新的单元状态cn中。

    LSTM用一个门来控制当前输出值hn的内容:

    • 输出门(output gate),它利用当前时刻单元状态cn对hn的输出进行控制。
      在这里插入图片描述

    3、LSTM参数量计算

    a、遗忘门

    在这里插入图片描述
    遗忘门这里需要结合ht-1和Xt来决定上一时刻的单元状态cn-1有多少保留到当前时刻;

    由图我们可以得到,我们在这一环节需要计一个参数ft

    在这里插入图片描述
    里面需要训练的参数分别是Wf和bf
    在定义LSTM的时候我们会使用到一个参数叫做units,其实就是神经元的个数,也就是LSTM的输出——ht的维度。
    所以:
    Wf=(xdim+hdim)hdim W_f的参数量 = (x_{dim} + h_{dim}) * h_{dim}
    bf=hdim b_f的参数量 = h_{dim}
    遗忘门的总参数量为:
    =((xdim+hdim)hdim+hdim) 总参数量 = ((x_{dim} + h_{dim}) * h_{dim} + h_{dim})

    b、输入门

    在这里插入图片描述
    输入门这里需要结合ht-1和Xt来决定当前时刻网络的输入c’n有多少保存到单元状态cn中。

    由图我们可以得到,我们在这一环节需要计算两个参数,分别是it

    在这里插入图片描述
    和C’t
    在这里插入图片描述
    里面需要训练的参数分别是Wi、bi、WC和bC
    在定义LSTM的时候我们会使用到一个参数叫做units,其实就是神经元的个数,也就是LSTM的输出——ht的维度。
    所以:
    Wi=(xdim+hdim)hdim W_i的参数量 = (x_{dim} + h_{dim}) * h_{dim}
    bi=hdim b_i的参数量 = h_{dim}
    Wc=(xdim+hdim)hdim W_c的参数量 = (x_{dim} + h_{dim}) * h_{dim}
    bc=hdim b_c的参数量 = h_{dim}
    输入门的总参数量为:
    =2((xdim+hdim)hdim+hdim) 总参数量 = 2*((x_{dim} + h_{dim}) * h_{dim} + h_{dim})

    c、输出门

    在这里插入图片描述
    输出门利用当前时刻单元状态cn对hn的输出进行控制;

    由图我们可以得到,我们在这一环节需要计一个参数ot

    在这里插入图片描述
    里面需要训练的参数分别是Wo和bo
    在定义LSTM的时候我们会使用到一个参数叫做units,其实就是神经元的个数,也就是LSTM的输出——ht的维度。
    所以:
    Wo=(xdim+hdim)hdim W_o的参数量 = (x_{dim} + h_{dim}) * h_{dim}
    bo=hdim b_o的参数量 = h_{dim}
    输出门的总参数量为:
    =((xdim+hdim)hdim+hdim) 总参数量 = ((x_{dim} + h_{dim}) * h_{dim} + h_{dim})

    d、全部参数量

    所以所有的门总参数量为:
    =4((xdim+hdim)hdim+hdim) 总参数量 = 4*((x_{dim} + h_{dim}) * h_{dim} + h_{dim})

    在Keras中实现LSTM

    LSTM一般需要输入两个参数。
    一个是unit、一个是input_shape。

    LSTM(CELL_SIZE, input_shape = (TIME_STEPS,INPUT_SIZE))
    

    unit用于指定神经元的数量。
    input_shape用于指定输入的shape,分别指定TIME_STEPS和INPUT_SIZE。

    实现代码

    import numpy as np
    from keras.models import Sequential
    from keras.layers import Input,Activation,Dense
    from keras.models import Model
    from keras.datasets import mnist
    from keras.layers.recurrent import LSTM
    from keras.utils import np_utils
    from keras.optimizers import Adam
    
    TIME_STEPS = 28
    INPUT_SIZE = 28
    BATCH_SIZE = 50
    index_start = 0
    OUTPUT_SIZE = 10
    CELL_SIZE = 75
    LR = 1e-3
    
    (X_train,Y_train),(X_test,Y_test) = mnist.load_data()
     
    X_train = X_train.reshape(-1,28,28)/255
    X_test = X_test.reshape(-1,28,28)/255
    
    Y_train = np_utils.to_categorical(Y_train,num_classes= 10)
    Y_test = np_utils.to_categorical(Y_test,num_classes= 10)
    
    inputs = Input(shape=[TIME_STEPS,INPUT_SIZE])
    
    x = LSTM(CELL_SIZE, input_shape = (TIME_STEPS,INPUT_SIZE))(inputs)
    x = Dense(OUTPUT_SIZE)(x)
    x = Activation("softmax")(x)
    
    model = Model(inputs,x)
    adam = Adam(LR)
    model.summary()
    model.compile(loss = 'categorical_crossentropy',optimizer = adam,metrics = ['accuracy'])
    
    for i in range(50000):
        X_batch = X_train[index_start:index_start + BATCH_SIZE,:,:]
        Y_batch = Y_train[index_start:index_start + BATCH_SIZE,:]
        index_start += BATCH_SIZE
        cost = model.train_on_batch(X_batch,Y_batch)
        if index_start >= X_train.shape[0]:
            index_start = 0
        if i%100 == 0:
            cost,accuracy = model.evaluate(X_test,Y_test,batch_size=50)
            print("accuracy:",accuracy)
    

    实现效果:

    10000/10000 [==============================] - 3s 340us/step
    accuracy: 0.14040000014007092
    10000/10000 [==============================] - 3s 310us/step
    accuracy: 0.6507000041007995
    10000/10000 [==============================] - 3s 320us/step
    accuracy: 0.7740999992191792
    10000/10000 [==============================] - 3s 305us/step
    accuracy: 0.8516999959945679
    10000/10000 [==============================] - 3s 322us/step
    accuracy: 0.8669999945163727
    10000/10000 [==============================] - 3s 324us/step
    accuracy: 0.889699995815754
    10000/10000 [==============================] - 3s 307us/step
    
    展开全文
  • TensorFlow初始化LSTM参数weight 和 bias

    千次阅读 2019-11-25 11:40:47
    TensorFlow 初始化 LSTM 参数 weight 和 bias 前言: 前一篇博客介绍了如何可视化神经网络的每一层,很简单的做法就是将训练好数据作为神经网络的初始化参数进行前向传播。在LSTM中我们可以从官方文档看到能初始化...

                      TensorFlow 初始化 LSTM 参数 weight 和 bias

    前言:

    前一篇博客介绍了如何可视化神经网络的每一层,很简单的做法就是将训练好数据作为神经网络的初始化参数进行前向传播。在LSTM中我们可以从官方文档看到能初始化的参数只有weight。在可视化时我们往往需要传入weight和bias,或者载入模型参数继续训练也需要载入w和b。

    初始化LSTM的weight

    初始化w比较简单,设置为一个常量传入即可,这里get_parameter函数为将模型参数读入到numpy,可参考上一篇博客。因为是两层的LSTM每层参数不一样分开两次写入,用constant赋值w。

    multi_rnn_cells = [get_parameter(model_dir,'generator_model/rnn/multi_rnn_cell/cell_0/lstm_cell/kernel'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_0/lstm_cell/bias'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_1/lstm_cell/kernel'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_1/lstm_cell/bias')]
       # rnn_layers = [tf.nn.rnn_cell.LSTMCell(size) for size in [rnn_size] * rnn_num_layers]
        rnn_layers = [tf.nn.rnn_cell.LSTMCell(64,initializer=tf.constant_initializer(multi_rnn_cells[0], tf.float32)),
                     tf.nn.rnn_cell.LSTMCell(64, initializer=tf.constant_initializer(multi_rnn_cells[2], tf.float32))]

    我们可以通过以下代码查看当前weight和bias里面的参数是否设置成功

        init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
        sess = tf.Session()
        sess.run(init)
        tv = [v.name for v in tf.trainable_variables()]
        outs = sess.run([tv, outputs])
        print("output: ",outs)

    可以看到我们的weight已经赋值成功了,在LSTM中bias是以全0初始化的未赋值

    初始化LSTM的bias

    初始化bias我们可以用tf.assign来完成赋值。

    先查看以下当前LSTM中weight,bias的变量名称通过如下代码,可以看到bias变量名称为‘rnn/multi_rnn_cell/cell_0/lstm_cell/bias’的形式

    init = tf.group(tf.global_variables_initializer(),tf.local_variables_initializer())
    sess = tf.Session()
    sess.run(init)
    tv = [v.name for v in tf.trainable_variables()]
    print("tv: ", tv)
    
    
    result : 
    tv:  ['rnn/multi_rnn_cell/cell_0/lstm_cell/kernel:0',
     'rnn/multi_rnn_cell/cell_0/lstm_cell/bias:0', 
    'rnn/multi_rnn_cell/cell_1/lstm_cell/kernel:0', 
    'rnn/multi_rnn_cell/cell_1/lstm_cell/bias:0']

    通过get_variable来拿到当前变量,并且用tf.assign来对bias赋值。

        with tf.Session() as sess:
            init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
            sess.run(init)
            with tf.variable_scope('rnn', reuse=tf.AUTO_REUSE):
                a = tf.get_variable('multi_rnn_cell/cell_0/lstm_cell/bias', shape=multi_rnn_cells[1].shape)
                b = tf.get_variable('multi_rnn_cell/cell_1/lstm_cell/bias', shape=multi_rnn_cells[3].shape)
                print(a, "variable")
                a = tf.assign(a, multi_rnn_cells[1])
                b = tf.assign(b, multi_rnn_cells[3])
            sess.run(a)
            sess.run(b)
            tvars = sess.run([tv, outputs])
        print(tv)
        print("output: ", tvars)

    可以看到目前bias也成功赋值了。我们需要注意的是需要先run出a和b这两个赋值操作。

    完整代码

        multi_rnn_cells = [get_parameter(model_dir,'generator_model/rnn/multi_rnn_cell/cell_0/lstm_cell/kernel'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_0/lstm_cell/bias'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_1/lstm_cell/kernel'),
                          get_parameter(model_dir, 'generator_model/rnn/multi_rnn_cell/cell_1/lstm_cell/bias')]
        print(multi_rnn_cells[0].shape, multi_rnn_cells[1].shape, multi_rnn_cells[2].shape, multi_rnn_cells[3].shape)
        # rnn_layers = [tf.nn.rnn_cell.LSTMCell(size) for size in [rnn_size] * rnn_num_layers]
        rnn_layers = [tf.nn.rnn_cell.LSTMCell(64,initializer=tf.constant_initializer(multi_rnn_cells[0], tf.float32)),
                     tf.nn.rnn_cell.LSTMCell(64, initializer=tf.constant_initializer(multi_rnn_cells[2], tf.float32))]
        multi_rnn_cell = tf.nn.rnn_cell.MultiRNNCell(rnn_layers)
        outputs, state = tf.nn.dynamic_rnn(cell=multi_rnn_cell, inputs=reshape_1, dtype=tf.float32)
        with tf.Session() as sess:
            init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
            sess.run(init)
            with tf.variable_scope('rnn', reuse=tf.AUTO_REUSE):
                a = tf.get_variable('multi_rnn_cell/cell_0/lstm_cell/bias', shape=multi_rnn_cells[1].shape)
                b = tf.get_variable('multi_rnn_cell/cell_1/lstm_cell/bias', shape=multi_rnn_cells[3].shape)
                print(a, "variable")
                a = tf.assign(a, multi_rnn_cells[1])
                b = tf.assign(b, multi_rnn_cells[3])
            sess.run(a)
            sess.run(b)
            tvars = sess.run([tv, outputs])
        print(tv)
        print("output: ", tvars)

     

     

    展开全文
  • LSTM参数个数计算

    万次阅读 多人点赞 2018-09-21 16:53:35
    今天看程序看到了LSTM,原理都懂,但是想看看参数的个数是怎么算出来的,先简单介绍下我的网络前两层: (1)第一层是一个 embedding 层,输出是 100 维的。 (2)第二层是一个 LSTM 层,输出是 512 维的。 LSTM...
  • LSTM参数列表 Pytorch中创建一个LSTM网络,参数列表如下: 参数 解释 input_size 输入数据的特征维数 hidden_size LSTM中隐层的维度 num_layers 循环神经网络的层数 bias 用不用偏置,default=True ...
  • lstm参数理解

    2020-01-19 15:01:24
    keras LSTM的理解欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...
  • keras LSTM参数详解和LSTM相关知识

    千次阅读 2020-08-23 13:14:30
    LSTM层: keras.layers.recurrent.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_...
  • pytorch中lstm参数与案例理解。

    万次阅读 多人点赞 2019-05-17 16:53:34
    看pytorch官网对应的参数nn.lstm(*args,**kwargs), 默认传参就是官网文档的列出的列表传过去。对于后面有默认值(官网在参数解释第一句就有if啥的,一般传参就要带赋值号了。) 官网案例对应的就是前三个。input...
  • LSTM参数个数计算方法

    千次阅读 2020-04-05 17:25:40
    可以看到若不加偏置,该LSTM层共有4个权重参数,图中输入的一个timestep的特征大小为3(绿色单元),隐藏层输出大小为2(橙色单元),因此该LSTM层的参数个数为: n=4∗(2+3)∗2=40n=4*(2+3)*2=40n=4∗(2+3)∗2=40 ...
  • 小白循环神经网络RNN LSTM 参数数量 门单元 cell units timestep batch_size RNN循环神经网络 timestep batch_size LSTM参数计算 keras中若干个Cell例如LSTMCell 1.RNN循环神经网络 先来解释一下 batch_size ...
  • 详细理解pytorch的lstm参数

    千次阅读 2019-07-02 14:24:13
    参数: input_size:输入'x'中预期特性的数量 hidden_size:隐藏状态'h'中的特性数量 num_layers:循环层的数量。例如,设置' ' num_layers=2 ' '意味着将两个LSTM堆叠在一起,形成一个'堆叠的LSTM ',第二个LSTM接收第...
  • 官网案例理解: import torch import torch.nn as nn # 神经网络...# 输入数据x的向量维数10, 设定lstm隐藏层的特征维度20, 此model用2个lstm层。如果是1,可以省略,默认为1) input = torch.randn(5, 3, 10) ...
  • cnn、lstm参数计算

    千次阅读 2018-12-17 10:27:54
    一、cnn参数计算   假设输入7*7*3,卷积核3*3*2,stride=(1,1),输出是3*3*2 参数量计算:fileter_size✖️input_channel✖️output_channel 解释:参数量与输入尺寸无关,只是卷积核的参数,每一个卷积核首先...
  • LSTM中模型的输出为ht,中间状态为ct it=σ(Wiixt+bii+Whih(t−1)+bhi)ft=σ(Wifxt+bif+Whfh(t−1)+bhf)gt=tanh⁡(Wigxt+big+Whgh(t−1)+bhg)ot=σ(Wioxt+bio+Whoh(t−1)+bho)ct=ft∗c(t−1)+it∗gtht=ot∗tanh⁡(ct)...
  • Keras中LSTM参数的含义

    万次阅读 2018-09-14 21:35:03
    units还可以理解为:假如units=128,就一个单词而言,你可以把LSTM内部简化看成 ,X为词向量比如64维,W中的128就是units,也就是说通过LSTM,把词的维度由64转变成了128。 参考:...
  • keras.layers.LSTM参数 API

    千次阅读 2020-08-22 23:40:29
    tf.keras.layers.LSTM( units, activation="tanh", recurrent_activation="sigmoid", use_bias=True, kernel_initializer="glorot_uniform", recurrent_initializer="orthogonal", bias_initializer="zeros",...
  • 参考:https://zhuanlan.zhihu.com/p/102904450 与嘉神的 https://blog.csdn.net/ssjdoudou/article/details/105566465 结束会使用自己的demo讨论

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,320
精华内容 528
关键字:

lstm参数