Deepctr框架代码阅读
2024-09-03 11:38:18
DeepCtr是一个简易的CTR模型框架,集成了深度学习流行的所有模型,适合学推荐系统模型的人参考。
我在参加比赛中用到了这个框架,但是效果一般,为了搞清楚原因从算法和框架两方面入手。在读代码的过程中遇到一些不理解的问题,所以记录在这里。
- dense_embedding和sparse_embedding的区别?
处理dense, 是将dense接全连接层变成embedding size的一个list,然后和sparse一样的操作 - concat_fun 这里是concat什么?fm的输入为什么需要concat?
原来是list,每一行是一个tensor,concat之后是tensor,每一行是tensor - tf.keras.layers.Flatten()(fm_input)
原先的embedding输入是[d,f,k],deep embedding是[d,f*k] - 这里的实现和我的实现不一样:
我的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,同时改很多接口,时间代价较大。
最新文章
- Leetcode 345 Reverse Vowels of a String 字符串处理
- C# 操作Cookie类
- 【转】深入PHP FTP类的详解
- WordLight: highlights all occurrences of a selected text for VS2008
- QT连接mysql中文显示问题
- js函数中的BOM和DOM
- 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest I Lottery
- bzoj 4033: [HAOI2015]树上染色 [树形DP]
- Yii2 日志处理
- Venom- Eminem
- [原]eclipse + pydev :Error in sitecustomize; set PYTHONVERBOSE for tracaeback: KeyError: 'sitecustomize'
- Centos 6.4 安装erlang&;rabbitmq
- [LeetCode] 596. Classes More Than 5 Students_Easy tag:SQL
- pycharm+PyQt5+python最新开发环境配置,踩坑过程详解
- Dictionary应用
- SQL Server中的快捷键
- java中方法drawImage()的参数详细解释
- XPATH之normalize-space(.)和normalize-space(text())区别
- PHP面试题,自己几斤几两,看看就知道了
- 2016.7.12 eclispe使用mybatis generator生成代码时提示project E is not exist
热门文章
- 编译安装nginx错误解决!
- org.springframework.data.redis.RedisConnectionFailureException
- java窗口程序字符串时间转成时间戳
- Web基础了解版09-Cookie-Session
- C/C++网络编程3——地址族与数据序列
- springBoot整合mybatis-plus关闭自动转换小驼峰命名规则
- Python 中命令行参数解析工具 docopt 安装和应用
- Languages-used-on-the-Internet
- Linux centos7iptables filter表案例、iptables nat表应用
- XML简单介绍