Get negative loss when running the codes
Hi, when I run the codes, I just get negative values of the loss.

Anything wrong?
Thanks.
if epoch < 500:
if epoch % 250 == 0:
dev_step(tset, train_m, test_m)
dev_cold(u_train,i_train, tset, train_m, test_m)
These codes mean that the evaluation results are printed every 250 epochs, you can change it to a more small value such as 5 or 10. For example:
if epoch < 500:
if epoch % 5 == 0:
dev_step(tset, train_m, test_m)
dev_cold(u_train,i_train, tset, train_m, test_m)
@chenchongthu It seems this does not have a relation to the negative loss values. I can still get negative loss values when I run the codes.
if you do not want to see the training log, just hide this line:
print 'loss,loss_no_reg,loss_reg ', loss[0] / ll, loss[1] / ll, loss[2] / ll
interesting!
File "G:\git\EHCF\code\EHCF.py", line 339, in dev_step user_te2 = user_te[:, np.newaxis]
IndexError: too many indices for array
报这个错误,请大家帮帮忙解决一下
File "G:\git\EHCF\code\EHCF.py", line 339, in dev_step user_te2 = user_te[:, np.newaxis]
IndexError: too many indices for array
报这个错误,请大家帮帮忙解决一下
没有遇到过这个问题,你是改代码了吗?如果不改的话是可以直接运行的
因为我的环境是tf 2.0 py3.7 ,所以改了一些基本的语法。EHCF sin.py可以运行,就是EHCF.py出的问题。另外还想问一下作者大人,看你的论文时候就没懂EHCF sin和EHCF的区别是什么?就是没懂EHCF sin怎么来的?辛苦作者大人帮我解答一下疑惑。
EHCF_sin和EHCF的区别是EHCF_sin只使用了purchase这一种用户行为数据,是一个广泛意义上的推荐任务。而EHCF也同时使用了用户和商品其他种类的行为数据,比如view和cart,我们的文章也指出了使用这些额外种类的行为信息可以极大的提升对目标行为(purchase)的预测效果。
user_te2 = user_te[:, np.newaxis] 这个语句的意思是对向量添加一维,比如把 [1 2 3 4 5] 变成 [[1] [2] [3] [4] [5]]
你看看是不是哪里改代码的时候改错了。
感恩作者大人,明白啦,学到了很多,报错我再尝试改改
不客气!觉得我们的方法有用的话点个星再走喽哈哈😆
没问题,关注您,准备再学习下您的其他项目
我想题主的问题是:你文章中的loss(公式5)是一些平方和的和,为什么输出的loss是负值?
因为常数项对于求导是无用的可以消掉,你可以对比公式5和公式6,第一项为0或者1,那么它的展开后是一个常数,可以直接去掉。
求作者大人解答下论文中公式2,他们是相乘吗?还有文章中提到的正数据positive data具体是什么意思呀
@morningnn Hi,
(1)公式2里面是按位点乘(element-wise product of vectors)。 (2)文章中提到的positive data指的是在隐式反馈(implicit feedback)中存在的用户交互数据,如用户的点击、购买、和观看行为等。因为在隐式反馈数据中往往只存在有正反馈数据而没有负反馈数据,在训练模型时需要使用一些策略来产生负反馈数据。常用的有基于采样的(negative sampling)方法和非采样(non-sampling, whole-data)方法,而本文使用的是非采样策略。文章也通过实验展示了非采样训练方法对于提升推荐系统的表现是非常有效的。(另外如果还有问题的话可以重开一个issue哈)
感恩作者大人
因为我的环境是tf 2.0 py3.7 ,所以改了一些基本的语法。EHCF sin.py可以运行,就是EHCF.py出的问题。另外还想问一下作者大人,看你的论文时候就没懂EHCF sin和EHCF的区别是什么?就是没懂EHCF sin怎么来的?辛苦作者大人帮我解答一下疑惑。
File "G:\git\EHCF\code\EHCF.py", line 339, in dev_step user_te2 = user_te[:, np.newaxis]
IndexError: too many indices for array
报这个错误,请大家帮帮忙解决一下
这个怎么解决的?
因为我的环境是tf 2.0 py3.7,所以改了一些基本的语法。EHCFsin.py可以运行,就是EHCF.py出的问题。 EHCF sin和EHCF的区别是什么?就是没懂EHCF sin怎么来的?辛苦作者大人帮我解答一下疑惑。
在dev_step中的文件“ G:\ git \ EHCF \ code \ EHCF.py”,行339 user_te2 = user_te [:, np.newaxis] IndexError:数组索引过多 报这个错误,请大家帮帮忙解决一下
这个怎么解决的?
请问你解决了吗?我也报了这个错误,没有改具体代码呀,就是改了一点点不适用的语法
在dev_step中的文件“ G:\ git \ EHCF \ code \ EHCF.py”,行339 user_te2 = user_te [:, np.newaxis]
IndexError:数组索引过多
报这个错误,请大家帮帮忙解决一下
麻烦请问一下,这个问题,你解决了吗?我跟你情况一模一样呀,期待你的回复呀
在dev_step中的文件“ G:\ git \ EHCF \ code \ EHCF.py”,行339 user_te2 = user_te [:, np.newaxis] IndexError:数组索引过多 报这个错误,请大家帮帮忙解决一下
麻烦请问一下,这个问题,你解决了吗?我跟你情况一模一样呀,期待你的回复呀
回答:代码中前一行user_te = np.array(tset.keys())存在bug,可以改为user_te = np.array(list(tset.keys())) 解释:np.array(object)中的object必须得是array-like类型或者是Sequence类型才能得到期望输出,python3的基本类型中属于Sequence类型的只有有list, tuple, range。tset.keys()为字典视图对象,不属于序列类型,应该使用类型转换构建序列类型。