zoukankan      html  css  js  c++  java
  • tensorflow实现lstm中遇到的函数记录

    函数一:initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=123)

    tf.random_uniform_initializer

    参数:

    • minval:一个 python 标量或一个标量张量。要生成的随机值范围的下限。
    • maxval:一个 python 标量或一个标量张量。要生成的随机值范围的上限。对于浮点类型默认为1。
    • seed:一个 Python 整数。用于创建随机种子。查看 tf.set_random_seed 的行为。
    • dtype:数据类型。 

    函数二:lstm = tf.contrib.rnn.LSTMCell(rnn_size, initializer=tf.random_uniform_initializer(-0.1, 0.1, seed=123))

      定义基本的lstm单元,rnn_size是lstm cell中的单元数,与输入向量的维度是一致的。根据输入的词向量,来定义维度。

    函数三:lstms = tf.contrib.rnn.MultiRNNCell([get_lstm(rnn_size) for _ in range(rnn_num_layers)])

      用于实例化递归神经网络,rnncell由多个simple cell组成,返回值为输入张量或者张量列表

    函数四:encoder_outputs, encoder_states = tf.nn.dynamic_rnn(lstms, encoder_embed, source_sequence_len, dtype=tf.float32)

      encoder_embed代表输入,[x,y,z]x代表batch的大小,y文本长度,z是embedding编码的长度。  

      source-sequence_len代表输入的文本长度,可以设置为[x,y],x代表最大长度,y是此次长度,我也没看太懂,之后继续补充:https://blog.csdn.net/u010223750/article/details/71079036

      encoder_outputs,每一个迭代隐状态的输出

      encode_states,代表最后的编码的码字context Vector(其长度有什么确定?后面再补充)

      补充:官方文档:

      'outputs' is a tensor of shape [batch_size, max_time, cell_state_size]

      'state' is a tensor of shape [batch_size, cell_state_size]

      我们用一个小例子来说明其用法,假设你的RNN的输入input是[2,20,128],其中2是batch_size,20是文本最大长度,128是embedding_size,可以看出,有两个example,我们假设第二个文本长度只有13,剩下的7个是使用0-padding方法填充的。dynamic返回的是两个参数:outputs,last_states,其中outputs是[2,20,128],也就是每一个迭代隐状态的输出,last_states是由(c,h)组成的tuple,均为[batch,128]

      因此context vector的输出的长度为embedding编码的长度。

    函数五:tf.identity

      看例子:https://blog.csdn.net/hu_guan_jie/article/details/78495297

      自己理解作用,通过tf.identity,在图中只有operation才会执行,因此通过简单的y=x赋值,在图中并不会执行,因此需要定义一个operation,在图中形成一个节点,tf.identity是返回一个一   模一样新的tensor的op,这会增加一个新节点到gragh中。

    函数六:masks = tf.sequence_mask(target_sequence_len, max_target_sequence_len, dtype=tf.float32, name="masks")

      返回一个表示每个单元的前N个位置的mask张量。

      示例:

      tf.sequence_mask([1, 3, 2], 5) # [[True, False, False, False, False],

                     # [True, True, True, False, False],

                     # [True, True, False, False, False]]

      tf.sequence_mask([[1, 3],[2,0]]) # [[[True, False, False],

                      # [True, True, True]],

                     # [[True, True, False],

                       # [False, False, False]]]

    函数七:encoder_embed = tf.contrib.layers.embed_sequence(rnn_inputs, source_vocab_size, encoder_embedding_size)

      tf.contrib.layers.embed_sequence(ids, vocab_size,  embed_dim)

      ids: 形状为[batch_size, doc_length]的int32或int64张量,也就是经过预处理的输入数据。

      vocab_size: 输入数据的总词汇量,指的是总共有多少类词汇,不是总个数

      embed_dim:想要得到的嵌入矩阵的维度

      返回值:Tensor of [batch_size, doc_length, embed_dim] with embedded sequences.

      

     

      

  • 相关阅读:
    MySQL存储写入性能严重抖动分析
    关于MySQL的commit非规律性失败案例的深入分析
    MySQL存储写入速度慢分析
    MySQL缓存之Qcache与buffer pool对比
    SQL执行过程中的性能负载点
    关于MySQL用户会话及连接线程
    如何查询、修改参数状态值
    genymotion 前端调试
    name是个特殊的变量名吗
    background-size 导致的背景不居中问题
  • 原文地址:https://www.cnblogs.com/smartwhite/p/9209985.html
Copyright © 2011-2022 走看看