LSTM编程所用函数

1、Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。可是当保留位跟着的即使是5,有可能进位,也有可能舍去,机会各50%

2、python基础

(1)@property 特性      #在cal_add函数前加上@property,使得该函数不可以被赋值,将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则

def cal_add(self):
return self.x + self.y

面向对象的封装有三种方式:
【public】
这种其实就是不封装,是对外公开的
【protected】
这种封装方式对外不公开,但对朋友(friend)或者子类(形象的说法是“儿子”,但我不知道为什么大家 不说“女儿”,就像“parent”本来是“父母”的意思,但中文都是叫“父类”)公开
【private】
这种封装对谁都不公开

(2)@classmethod 类方法   #在cal_info函数前加上@classmethon,则该函数变为类方法,该函数只能访问到类的数据属性,不能获取实例的数据属性

def cal_info(cls): #python自动传入位置参数cls就是类本身
print('这是一个%s'%cls.cal_name) #cls.cal_name调用类自己的数据属性

 

(3)@staticmethod  静态方法 #实例也可以使用,但通常静态方法都是给类用的,实例在使用时丧失了自动传值的机制

@staticmethod #静态方法 类或实例均可调用
def cal_test(a,b,c): #该静态方法函数里不传入self 或 cls

应用场景:编写类时需要采用很多不同的方式来创建实例,而我们只有一个__init__函数,此时静态方法就派上用场了

参考原博:https://www.cnblogs.com/wangyongsong/p/6750454.html#_label1

(4)def __str__(self):
        return 'year:%s month:%s day:%s' %(self.year,self.month,self.day)
用法:打印一个类的时候会打印出其中的一些数值内容

3、LSTM 参数设置
class BasicLSTMCell(RNNCell):
  def __init__(self, num_units, forget_bias=1.0,state_is_tuple=True):
  • num_units:  int, 在LSTM cell中unit 的数目
  • forget_bias:  float, 添加到遗忘门中的偏置
    刚开始初始化成1, LSTM不会传递任何状态C, 因为forget GATE把C归零了. 这避免了刚开始训练就有输出爆炸或者消失的问题
  • state_is_tuple:是True
4、tf.nn.dynamic_rnn

tf.nn.dynamic_rnn(
cell,
inputs,
sequence_length=None,
initial_state=None,
dtype=None,
parallel_iterations=None,
swap_memory=False,
time_major=False,
scope=None)

5、LSTM结构

6、LSTM
self.cell_outputs, self.cell_final_state = tf.nn.dynamic_rnn(
lstm_cell, self.l_in_y, initial_state=self.cell_init_state, time_major=False)
cell_final_state分为两个,一个主线state,一个分线state


posted @ 2019-04-04 09:32  LIN_KID  阅读(876)  评论(0编辑  收藏  举报