qiaoguan / deep-ctr-prediction

CTR prediction models based on deep learning(基于深度学习的广告推荐CTR预估模型)
https://github.com/qiaoguan/deep-ctr-prediction
907 stars 276 forks source link

tf.estimator.Estimator()定义内的参数model_fn应该赋值什么 #3

Closed DJy4ever closed 4 years ago

DJy4ever commented 4 years ago

我想问一下在train.py中的tf.estimator.Estimator()定义内的参数model_fn应该赋值什么,您赋值的din_model_fn是什么意思

qiaoguan commented 4 years ago

详细的你可以看这个api文档,https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator , 里面有model_fn, model_fn里面有 几个参数,features, labels,这些是input_fn返回的结果, 简单点说,model_fn就是定义模型计算的一个函数,他依赖的数据由input_fn传递, 具体你可以看相应的API的文档和我的代码。

DJy4ever commented 4 years ago

详细的你可以看这个api文档,https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator , 里面有model_fn, model_fn里面有 几个参数,features, labels,这些是input_fn返回的结果, 简单点说,model_fn就是定义模型计算的一个函数,他依赖的数据由input_fn传递, 具体你可以看相应的API的文档和我的代码。

那请问您定义的xdeepfm模型是怎么加载到estimate中的呢?我当初以为model_fn应该赋值的是你xdeepfm.py中的函数

qiaoguan commented 4 years ago

这个地方写错了, 已经修改,model_fn=xdeepfm_model_fn, xdeepfm_model_fn定义在xdeepfm.py

DJy4ever commented 4 years ago

哦哦 这我就明白了,谢谢,往后有不明白的还望不吝赐教!

DJy4ever commented 4 years ago

我想问一下utils.py中的dice()函数的作用到底是什么,不是看得很明白,能简单的解释下吗?

qiaoguan commented 4 years ago

相当于一个normalization, 比如batch normalization, layer normalization, 我刚更新了一下代码,在model_fn里面把它去掉了

DJy4ever commented 4 years ago

我明白了,谢谢!还有就是model_fn=xdeepfm_model_fn这句代码中定义的xdeepfm_model_fn函数中features变量好象没有被传值,是不是缺少features的参数传入呢?

qiaoguan commented 4 years ago

features是input_fn返回的结果,训练的时候,input_fn会把数据传给model_fn, 你有时间可以好好看一下代码,结合tensorflow的api文档,慢慢看,

DJy4ever commented 4 years ago

哈哈好的,我就在一行一行的扣,以前没有用过tf.estimator.Estimator()这个api,所以有些不太明白。

DJy4ever commented 4 years ago

再次叨扰,我想问一下我的特征列如果是数值型,还有有些特征已经做了onehot后如何利用tf.feature_column.embedding_column做特征交叉?

qiaoguan commented 4 years ago

我input_fn里面有例子,直接分桶tf.feature_column.bucketized_column, 然后再使用embedding_column

DJy4ever commented 4 years ago

对于连续性特征只能分桶处理了是么?如果不用tf.estimator.Estimator API,是不是还可以用tf.nn.embedding_lookup()来解决连续值做embedding的问题?

qiaoguan commented 4 years ago

连续型一般先分桶,不用estimator API当然也可以

DJy4ever commented 4 years ago

抱歉再次叨扰。我想请问一下我现在训练过程中监控graph中的某些变量该怎么做呢?就像sess.run那样

qiaoguan commented 4 years ago

你想监控什么呢? sess.run 太慢,在训练数据规模很大的时候不建议用这个,所以我代码里面用的Dataset API。 我代码里面自定义各种评价指标之类的其实都很完善了,在evaluate的时候会计算。 其他的你想看的话,可以用tensorboard

DJy4ever commented 4 years ago

就是想看一些中间计算的变量,因为我现在loss基本不变而且就那几个值,我怀疑抹些地方出问题了,想看一下在graph跑起来之后具体的值是多少

qiaoguan commented 4 years ago

试试tensorboard

DJy4ever commented 4 years ago

我想问一下input如果有大量的连续值,我来做xdeepfm的话效果会不会有影响,也就是说xdeepfm对连续性特征由良好的效果么?还有我现在模型没加线性,也没加bias,特征由大量的连续值,类别型很少,效果不是很理想,想问问您的看法

qiaoguan commented 4 years ago

我的input_fn里面提供的几种你可以多试试, 一般分桶离散化,转成dense vector 输入到DNN会比较多一些, 其他的思路也可以尝试, 最开始不熟悉的时候要多尝试,先理解一些基本的理论,再通过实践来尝试,慢慢的会一些自己的理解

DJy4ever commented 4 years ago

我看原文还有一层linear直接连接到output,我看您的代码里面没有,是用处不大么

qiaoguan commented 4 years ago

我的里面没有用wide部分,只用了deep部分, 有没有用要看具体业务,不能一概而论

DJy4ever commented 4 years ago

哦哦 好的。主要我现在训练损失变化不大,收敛很慢我就在找问题,认为可能是连续值太多了

DJy4ever commented 4 years ago

对了,还想问一下我如果想在代码中加入正则化损失没直接使用tf.losses.get_regularization_loss()获得正则化loss不知道可以么,因为感觉estimator api不是很容易获得variable变量的名称,不太容易加正则化

qiaoguan commented 4 years ago

建议你看一下这个API的源码,我也没用过这个api,你看下那个API是怎么计算的,慢慢熟悉吧