Open wheatx opened 4 years ago
同问
撰写说明文档 https://github.com/alibaba/x-deeplearning/blob/master/blaze/blaze/model_importer/ulf.md
DIEN中,RNN相关的那些可能比较难参考这个文档写出来,其它的部分倒是可以参考DIN的那个
嗯。但是DIEN中RNN那块好像没有可以参考的不然直接看DIN的这个https://github.com/alibaba/x-deeplearning/blob/master/blaze/tools/example_model/din/model/graph_ulf.txt 还会更好写呢。
比如图中的dynamic_rnn层 要用ulf的哪个layper, ulf.md中gru_layer也没有例子,其它layer都有例子
比如图中的dynamic_rnn层 要用ulf的哪个layper, ulf.md中gru_layer也没有例子,其它layer都有例子
例子如下:
layer_params {
name : "gru"
type : "gru_layer"
bottom : "input_tensor"
top : "output_tensor"
}
这里 input_tensor和output_tensor都是shape为[batch_size, seq_length, num_units]的三维张量。 其语义与下面的tf代码相同:
cell = tf.nn.rnn_cell.GRUCell(num_units=num_units)
output_tensor, _ = tf.nn.dynamic_rnn(cell, inputs=input_tensor)
我们之后会将文档中的例子补充完整。
rnn_outputs2, final_state2 = dynamic_rnn(VecAttGRUCell(attention_size*8, kernel_initializer=get_tf_initializer()), inputs=rnn_outputs, att_scores=tf.expand_dims(alphas, -1), sequence_length=seq_len, dtype=tf.float32, scope="gru2") 请教下DIEN下,RNN2的写法,多了个alphas
rnn_outputs2, final_state2 = dynamic_rnn(VecAttGRUCell(attention_size*8, kernel_initializer=get_tf_initializer()), inputs=rnn_outputs, att_scores=tf.expand_dims(alphas, -1), sequence_length=seq_len, dtype=tf.float32, scope="gru2") 请教下DIEN下,RNN2的写法,多了个alphas
你指的是这个吗?这个dynamic_rnn是自己实现的,不是tf原生的语义,所以暂时还没有支持。
但是,看你们既然放了dien的xdl版 那应该线上是有上线dien的吧。那应该也是通过blaze上的。这一步不是一定要经过的么。那你们目前是怎么解决的呢。理论上一定要写Ulf出来才可以吧。
我发现我发的跟你发的不一样哈,你发的好像用你之前发我的就可以处理吧,然后我发的是https://github.com/alibaba/x-deeplearning/blob/master/xdl-algorithm-solution/DIEN/script/model.py里的,rnn2跟rnn1处理的方式不一样是这样的:rnn_outputs2, final_state2 = dynamic_rnn(VecAttGRUCell(self.hidden_size, kernel_initializer=get_tf_initializer()), inputs=rnn_outputs, att_scores=tf.expand_dims( alphas, -1), sequence_length=self.tensors.seq_len, dtype=tf.float32, scope="gru2")
我发现我发的跟你发的不一样哈,你发的好像用你之前发我的就可以处理吧,然后我发的是[https://github.com/alibaba/x-deeplearning/blob/master/xdl-algorithm-solution/DIEN/script/model.py里的,rnn2跟rnn1处理的方式不一样
https://github.com/mouna99/dien/blob/1f314d16aa1700ee02777e6163fb8ca94e3d2810/script/model.py#L289 同一个函数,att_scores是一个可选参数。
了解了。也就是说。目前只有rnn1可以用gru_layer写,rnn2多了个参数的现在还不行是吗,或者说你们是怎么解决的,还是说,像旧版一样不传att_scores,只用rnn1的结果就好了
了解了。也就是说。目前只有rnn1可以用gru_layer写,rnn2多了个参数的现在还不行是吗,或者说你们是怎么解决的,还是说,像旧版一样不传att_scores,只用rnn1的结果就好了
可以像rnn1一样用,但视具体情况可能需要算法上做微调校准以保证效果。
嗯嗯,如果有支持传att_scores的写法,有机会可以告知下,如果能放出dien的ulf文件就更好了。
f 也就是说现在基本只能先用gru att gru 这种模式了。gru vec attgru还用不了没错吧。
也就是说现在基本只能先用gru att gru 这种模式了。gru vec attgru还用不了没错吧。 对,blaze的RNN里只实现了GRUCell,没有实现QAAttGRUCell。
` 好的,从paper来看这一块对AUC的提升并没有很大,主要的提升来自辅助Loss带来接近4个点的提升
在问一个问题,从源码中可以看出dynamic_rnn最后会返回一个pair,pair里会有两个pair (outputs, state),但是从之前对gru_layer的回复来看怎么好像只返回了outputs ,state并没有返回呢。因为state在后面的代码中会用到。
在问一个问题,从源码中可以看出dynamic_rnn最后会返回一个pair,pair里会有两个pair (outputs, state),但是从之前对gru_layer的回复来看怎么好像只返回了outputs ,state并没有返回呢。因为state在后面的代码中会用到。
gru里的hidden state就是输出,这里的返回值state其实就是output里的最后一个batch。
听说XDL团队正在修复BUG,不需ulf文件了,直接graph.txt就可以转成blaze需要的模型?
听说XDL团队正在修复BUG,不需ulf文件了,直接graph.txt就可以转成blaze需要的模型?
对,针对tdm-att的一些问题#254修的,在分支blaze-fix-v1.2上。DIEN你也可以尝试一下能不能跑通。有问题也请及时提出来。
尝试用graph.txt替换graph_ulf.txt 并加上-t 5参数,执行model_converter_example.sh 最后得到结果 在尝试执行 model_optimizer_example.sh 得到 [INFO ] [2019-12-03 02:25:13] [27686] [/home/wujunqing/x-deeplearning/blaze/blaze/optimizer/optimizer.h:34] optimizer op num: 0 -> 0 op个数为0
model_converter_example.sh中的一些日志,很多OP没注册
尝试用graph.txt替换graph_ulf.txt 并加上-t 5参数,执行model_converter_example.sh 最后得到结果 在尝试执行 model_optimizer_example.sh 得到 [INFO ] [2019-12-03 02:25:13] [27686] [/home/wujunqing/x-deeplearning/blaze/blaze/optimizer/optimizer.h:34] optimizer op num: 0 -> 0 op个数为0
这是DIEN模型是吧,那看来是不行。这些OP都是sparse部分的,blaze只支持了少量的sparse op,这些不支持。有一个办法,你可以把backend op暨dense部分单独拿出来,那个应该是可以转换的,不过这样你可能需要自己处理sparse部分,也就是embedding的逻辑,估计挺麻烦的。
是的。你说的应该是这个地方吧 那是不是DIEN基本就跑不通了。
那是不是DIEN基本就跑不通了。
是的。我查了一下当时的记录,sparse部分只是针对tdm模型做的,支持的op只有XdlImporter构造函数里的那些。
好的。了解了哈
我现在还是尝试用ulf版本的在写,gru那边稍稍做了下改动用了rnn1 rrn2 att 这样的,然后现在还有一个点不明白的,DIEN不是有辅助LOSS么,辅助LOSS那边的网络在ULF定义后如何跟主网络做结合呢。
不管什么loss对于inference来说是不感知的,所以不用配。
aux_loss = auxiliary_loss(rnn_outputs[:, :-1, :], item_his_eb[:, 1:, :], item_ehis_eb[:, 1:, :], mask[:, 1:], stag="gru") 也就是说,连这个方法里的concat, auxiliary_net , reshape相关的也都不用管对吗
aux_loss = auxiliary_loss(rnn_outputs[:, :-1, :], item_his_eb[:, 1:, :], item_ehis_eb[:, 1:, :], mask[:, 1:], stag="gru") 也就是说,连这个方法里的concat, auxiliary_net , reshape相关的也都不用管对吗
对。inference的时候,和最终分数没有依赖关系的中间结果都是不需要算的。
麻烦帮解决下这个问题吧。前期已经花费了不少时间了处理各种问题了,现在这步卡着过不去,这个文件又很难手动写出来,相关文档太少了,真的需要这个文件graph_ulf.txt