zoukankan      html  css  js  c++  java
  • 神经网络建模的一些感悟;

    2016/10/6
    1: 用自定义的weighted loss来看, 10000个batch仍然没有收敛;
    2:仍然使用sigmoid cross entropy loss, 7 epoches 左右仍然收敛,对于7w数据;
    3:改动loss, 避免nan loss的出现;
     
    2016/12/6
    1: 用lstm做classfication, 思路是将问题和答案各自转换成一个1000维向量,softmax作为1000个主题的概率,然后算点积和,最大化点积和的情况是两个属于同一个主题的概率最大;failed.
    2: 用weighted lstm,思想是不用lstm的最终向量,而是用每个词的output向量,根据单词的weight来做加权平均作为最终的向量; failed. 
         结果证明同时训练单词的weight和用weighted average lstm中间向量,结果还不如直接用lstm的最终output;
         NAN loss极有可能是分母为0所导致的;
     
    2017/1/12 
    1: 用normalize的方法将word embedding正规化,
         一般而言,tf提供了两种主流的方法,一种是L2的方法,就是将每个维度的数平方加起来等于1, 一种是local normalize的方法,分别搜索tf.nn.l2_normalize 和tf.nn.local_response_normalization。
         另外,tf提供了很多的算矩的方法,可以根据矩(均值和方差)来做normalize,见tf.nn.moments
     
    2: 对于lstm output用cnn的思考
         2.1:lstm output的话,对于一个句子,output的向量维度是[batch size, sentence length, rnn dimension, 2]
         (最后的一个2是因为采用的是bi-directional rnn,所以有两个值),
          所用的convolution方法是在sentence length的维度上取三个单词,在rnn dimension上取所有的长度,然后取256个channels,
         这样输出的向量就是[batch size, sentence length, 1, 256]. 然后relu处理(对所有的点取max(x, 0)),最后在sentence length的维度上maxpool;
         2.2 : 这里主要有几个问题
              1: sentence length取得是150, 但是其中包含了大量的填充,可能真实句子就只有15个词汇,剩下135全是填充词汇;
              2: rnn dimension上的不同维度代表不同的相对意义,但是线性的结合起来是否不合理?
     
    3: 因为实际的训练数据可能存在一定的bad case;因此每次训练一个batch,抛出top 5%最高的的loss;
     
    2017/1/23
     经过两天的训练,发现lstm_cnn模型最后收敛到了0.693147,这个数值代表所有的预测概率值都是0.5,有时候真的不是模型复杂最后结果好的;总结一句就是数据简单就上简单模型,数据复杂就试试增大模型体量,增加层数和参数数量;
     
     
  • 相关阅读:
    转载--编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议31~35)
    转载---编写高质量代码:改善Java程序的151个建议(第2章:基本类型___建议26~30)
    转载---编写高质量代码:改善Java程序的151个建议(第2章:基本类型___建议21~25)
    月薪两万不是梦,麻辣隔壁的
    23种设计模式(转)
    因为最近项目用到了shiro,所以转了份笔记研讨
    单例模式(摘)
    aop日志管理(摘)
    理解线程副本类(摘)
    eclipse反编译插件安装
  • 原文地址:https://www.cnblogs.com/LarryGates/p/6561470.html
Copyright © 2011-2022 走看看