博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
周五笔记
阅读量:5161 次
发布时间:2019-06-13

本文共 2541 字,大约阅读时间需要 8 分钟。

一、零碎知识点

  1. 准确率和召回率总是搞不清楚概念:
    池塘有1400条鲤鱼,300只虾和300只乌龟,我们的目的是打捞一次打捞上所有的鲤鱼。结果我们捞上来700条鲤鱼,200只虾和100只乌龟。那么:
    精确率:目标成果占总成果的比例,700/700+200+100 = 70%
    召回率:目标成果占实际目标成果的比例,700/1400=50%
    我们可以进一步理解:精确率是结果中我的目标结果的比率,召回率是有多少我想要的结果被成功“打捞”上来了。
  2. TypeError: 'str' object is not callable : 通常是由于前面定义变量名为str了。
  3. 跑新数据的时候验证集数据量可能大了一些,tensorflow allocation exceeds 10% of system memory.
cat /proc/meminfo | grep MemTotal 140G 内存大小cat /proc/cpuinfo | grep "physical id" | uniq | wc -l CPU个数 8个

With device(‘/cpu:0’) 不区分设备号 统一用0来表示, 所以CPU不能像GPU一样把数据分配到设备上面。

Resource exhausted : OOM when allocating tensor with shape(27757, 10950, 300) Caused by text-embedding/embedding_lookup 根据这条警告减少某个维度的大小,一般batch调小一点,max_length调小一点试一下。

  1. 深度学习在文本分类中的应用
    可以动手实践一下!
  2. Vscode 代码提示很慢:左下角齿轮setting-text editor-delay = 0

二、LSTM学习

Lstm 是 改进后的 rnn,因为RNN无法解决长距离的依赖问题。

我们先学习一下RNN的原理知识:
首先提出语言模型中的N-gram模型,假设一个词出现的频率与前面N个词有关,但是N越大,模型便会占用越大的存储空间。RNN却在理论上可以往前看任意多个词。

循环神经网络的隐藏层的值不仅仅取决于当前这次的输入X,还取决于上一次隐藏层的值S。

循环神经网络
1464741-20190322123703680-1195750087.png
双向循环神经网络
1464741-20190322123726834-1391446138.png
深度循环神经网络:多个 隐藏层
1464741-20190322123750667-60604875.png
但是,前面介绍的几种RNN模型并不能很好地处理较长的序列,因为在训练中很可能发生梯度爆炸和梯度消失,从而使RNN无法捕捉到长距离的影响。

LSTM的思路:

原始RNN的隐藏层只有一个状态H,它对于短期的输入非常敏感,我们可以再增加一个状态C,让它保存长期的状态。
1464741-20190322123815390-1468619114.png

LSTM的关键是如何控制长期状态C,思路是使用三个控制开关。第一个开关,控制继续保存长期状态;第二个开关负责控制把即时状态输入到长期状态;第三个状态控制是否把长期状态C作为当前LSTM的输出。

Tensorflow LSTM函数

Outputs, state =  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)

Final_state[0].h没有H这个属性

outputs形状为 [ batch_size, max_time, cell.output_size ]
Max_time是最长句子的单词数量,output_sizernn cell中神经元的个数。
State 是一个tensorstate是最终的状态,也就是序列中最后一个cell输出的状态,[batchsize, cell.outputsize]

tf.contrib.rnn.LSTMCell():LSTM的一个单元细胞定义

李宏毅老师的课堂笔记:

1.Output of hidden layer are stored in the memory and can be considered as another input. 要给memory一个初始值。改变序列顺序结果会变。同一个network在不同的时间点的图像。Elman network 存储隐藏层的值, jordan network存储output。
2.Lstm 写到memory cell前有个闸门,决定说什么时候能写进去;还有个output gate输出到神经网络的其他部分。Forget gate忘记cell中的内容。

1464741-20190322124118496-1361456338.png

四个输入和一个输出

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)

Dynamic : 输入数据的time_step不一定相同,如果长短不一,会自动跟短的补0,但处理的时候不会处理0,在0前面就截止了。
Time_major : true tensor must be shaped [max_time_length, batchsize ,depth] false: [batchsize, max_time, depth], output 为[batchsize, max_time, cell.output_size] `output_size就是cell的num_units.这里的outputs 是每个cell输出的叠加,而state是一个元组类型的数据,有c and h两个变量,存储的是LSTM的最后一个cell的输出状态。

Dynamic_rnn 相当于调用了N次call函数。

转载于:https://www.cnblogs.com/twomeng/p/10577536.html

你可能感兴趣的文章
DB层面上的设计 分库分表 读写分离 集群化 负载均衡
查看>>
放养两周总结
查看>>
JQuery控制radio选中和不选中方法总结
查看>>
K3 12.3表说明
查看>>
2019年春季第九周 编程总结
查看>>
Discuz!NT静态文件缓存(SQUID)
查看>>
andorid ListView和GirdView 与ScrollView 冲突
查看>>
WP8.1和Win8.1的不同之处
查看>>
回文串编辑
查看>>
观察者模式
查看>>
软件开发中的哲学——世界的本原是物质(一)
查看>>
Android(常用)主流UI开源库整理
查看>>
python 单例模式
查看>>
C++的访问关系
查看>>
始终使用属性(Property),而不是字段(Data Member)
查看>>
Python核心编程读笔 7: 条件和循环
查看>>
META http-equiv简介
查看>>
Linux下添加新硬盘,分区及挂载
查看>>
java.lang.OutOfMemoryError处理错误
查看>>
Spring Bean的ref属性和IoC注入集合
查看>>