luo han
luo han
the code in function `music.basic.ct` ``` for(iter in 1:iter.max){ weight.gene = 1/(nu + r^2 + weight.cal.ct(lm.D$x*S, Sigma.ct)) Y.weight = Y*sqrt(weight.gene) D.weight = X * as.matrix(sqrt(weight.gene))[,rep(1,k)] lm.D.weight = nnls(D.weight, Y.weight )...
这里的fields是为了生成offsets, 这里输入的数据经过label encode后,每一列是单独的label_encode, 而embedding的时候为了一次性的过一层embedding layer,就需要累加编码,比如A特征为0,1两种,B特征为0,1,2三种,那么需要把B的0,1,2变成2,3,4。这样在embedding中 A的0 和B的0不会被混淆[关联issue](https://github.com/Prayforhanluo/CTR_Algorithm/issues/1)
嗯嗯, 的确,要累加,然后索引往后+1, 这里应该是个bug; 这里看上应该修改为fields = data_x.max().values + 1
Bug feature_fields的作用是因为所有特征共用一个Embedding表,故而需要每列需要累加其索引 e.g. field_dims = [2, 4, 2], offsets = [0, 2, 6] 所以,实际look up table中 0 - 1行 对应 特征 X0, 即 field_dims[0] 2 - 5行 对应 特征 X1,...
是的,可以不加
是一样的, pytorch也好, tensorflow也好, 用的是label编码的方式作为输入的原因之一是,one-hot会有大量内存消耗, 而输入label encode + 查表得方式计算得embedding 与 one-hot后与embedding得weights相乘得到得结果会是一样的。 eg : x = torch.LongTensor([0,1,2,3]) x_one_hot = nn.functional.one_hot(x) embedding = nn.Embedding(4, 2) embedding(x) tensor([[-0.5853, -0.4129], [ 1.4309, 2.0298], [ 0.8416,...
我印象中好像是最后存的是最晚的时刻,最新的时刻存在了首位。有时间看看。
因为行为序列是不固定长度的,为了方便处理,给它固定长度了,比如20个行为,那没有20个行为的会用0 padding到20。在实际计算的时候padding这部分是不参与计算loss的,这就是mask的作用。 发自我的iPhone 在 2022年4月6日,09:15,yanduoduan ***@***.***> 写道: 大佬您好,最近看您的DIN代码,有一些地方不太明白,希望得到您的解答! 1、mask = (behaviors_x > 0).float().unsqueeze(-1) 这里的msak的具体作用是啥啊?为什么需要这个mask呢? 这里的 注意力输入部分,原始的好像没有queries - user_behavior吧?为啥有这一项呢 2、attn_input = torch.cat([queries, user_behavior, queries - user_behavior, queries * user_behavior], dim...
queries - user_behavior我记得它源码里有,好像,就加上了。 发自我的iPhone 在 2022年4月6日,09:37,罗 瀚 ***@***.***> 写道: 因为行为序列是不固定长度的,为了方便处理,给它固定长度了,比如20个行为,那没有20个行为的会用0 padding到20。在实际计算的时候padding这部分是不参与计算loss的,这就是mask的作用。 发自我的iPhone 在 2022年4月6日,09:15,yanduoduan ***@***.***> 写道: 大佬您好,最近看您的DIN代码,有一些地方不太明白,希望得到您的解答! 1、mask = (behaviors_x > 0).float().unsqueeze(-1) 这里的msak的具体作用是啥啊?为什么需要这个mask呢? 这里的 注意力输入部分,原始的好像没有queries - user_behavior吧?为啥有这一项呢 2、attn_input...