DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考。
我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手。在读代码的过程中遇到一些不理解的问题,所以记录在这里。

  1. dense_embedding和sparse_embedding的区别?
    处理dense, 是将dense接全连接层变成embedding size的一个list,然后和sparse一样的操作
  2. concat_fun 这里是concat什么?fm的输入为什么需要concat?
    原来是list,每一行是一个tensor,concat之后是tensor,每一行是tensor
  3. tf.keras.layers.Flatten()(fm_input)
    原先的embedding输入是[d,f,k],deep embedding是[d,f*k]
  4. 这里的实现和我的实现不一样:
    我的linear+interact+deep接入全连接层,将所有的特征接入全连接层, 但是根据根据论文和多家的博客来看,我之前理解的是错误的,正确的应该是 fm logit+deep logit,最后接全连接层。 同时AFM等多个模型都是这么处理的。

运行模型,每次结果不一样:
这个属于正常现象,尤其是数据不够充分的情况下,
主要原因是由于Tensorflow底层的多线程运行机制以及一些具有随机性的op和random seed导致的。
如果想让每次运行的结果尽量一致,可以考虑使用CPU运行程序,并且指定单线程运行,同时固定random seed,包括python自身的,Numpy的还有tensorflow的

总结这个框架:

  • 整体结构清晰灵活,linear返回logit,FM层返回logit,deep包含中间层结果,在每一种模型中打包deep的最后一层,判断linear,fm和deep是否需要,最后接入全连接层。
  • 主要用到的模块和架构: keras的Concatenate(list转tensor),Dense(最后的全连接层和dense),Embedding(sparse,dense,sequence),Input(sparse,dense,sequce)还有常规操作:优化器,正则化项
  • 复用了重载了Layer层,重写了build,call,compute_output_shape,compute_mask,get_config

缺点:

  • 给定的参数都是论文提供的参数,实际使用存在问题,都需要自己修改!
  • 好多参数没有留接口,比如回归问题的loss 是mean_squared_error,只能通过硬写来修改参数
  • 如果想实现自己的模型,复用这个框架,需要了解keras,同时改很多接口,时间代价较大。

最新文章

  1. Leetcode 345 Reverse Vowels of a String 字符串处理
  2. C# 操作Cookie类
  3. 【转】深入PHP FTP类的详解
  4. WordLight: highlights all occurrences of a selected text for VS2008
  5. QT连接mysql中文显示问题
  6. js函数中的BOM和DOM
  7. 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest I Lottery
  8. bzoj 4033: [HAOI2015]树上染色 [树形DP]
  9. Yii2 日志处理
  10. Venom- Eminem
  11. [原]eclipse + pydev :Error in sitecustomize; set PYTHONVERBOSE for tracaeback: KeyError: 'sitecustomize'
  12. Centos 6.4 安装erlang&rabbitmq
  13. [LeetCode] 596. Classes More Than 5 Students_Easy tag:SQL
  14. pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
  15. Dictionary应用
  16. SQL Server中的快捷键
  17. java中方法drawImage()的参数详细解释
  18. XPATH之normalize-space(.)和normalize-space(text())区别
  19. PHP面试题,自己几斤几两,看看就知道了
  20. 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist

热门文章

  1. 编译安装nginx错误解决!
  2. org.springframework.data.redis.RedisConnectionFailureException
  3. java窗口程序字符串时间转成时间戳
  4. Web基础了解版09-Cookie-Session
  5. C/C++网络编程3——地址族与数据序列
  6. springBoot整合mybatis-plus关闭自动转换小驼峰命名规则
  7. Python 中命令行参数解析工具 docopt 安装和应用
  8. Languages-used-on-the-Internet
  9. Linux centos7iptables filter表案例、iptables nat表应用
  10. XML简单介绍