• 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.

      

     

      

  • 相关阅读:
    java Android get date before 7 days (one week) Stack Overflow
    计算机网络与分布式系统实验室 北京大学
    得到IFrame中的Document
    eclipse如何把多个项目放在一个文件夹下
    windows 32位程序编译成64位
    iPhone5和iOS6上HTML5开发的新增功能
    Thinking in Java之接口回调改版
    Java学习笔记35:Java常用字符串操作函数
    进一步优化Bitmap Cache策略
    微软安全新闻聚焦双周刊第三十期
  • 原文地址:https://www.cnblogs.com/smartwhite/p/9209985.html
Copyright © 2020-2023  润新知