Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Get negative loss when running the codes #1

Open
xuChenSJTU opened this issue Feb 4, 2020 · 21 comments
Open

Get negative loss when running the codes #1

xuChenSJTU opened this issue Feb 4, 2020 · 21 comments

Comments

@xuChenSJTU
Copy link

xuChenSJTU commented Feb 4, 2020

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

Anything wrong?

Thanks.

@chenchongthu
Copy link
Owner

chenchongthu commented Feb 4, 2020

            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)

@xuChenSJTU
Copy link
Author

@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.

@chenchongthu
Copy link
Owner

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

@xuChenSJTU
Copy link
Author

interesting!

@morningnn
Copy link

File "G:\git\EHCF\code\EHCF.py", line 339, in dev_step
user_te2 = user_te[:, np.newaxis]

IndexError: too many indices for array

报这个错误,请大家帮帮忙解决一下

1 similar comment
@morningnn
Copy link

File "G:\git\EHCF\code\EHCF.py", line 339, in dev_step
user_te2 = user_te[:, np.newaxis]

IndexError: too many indices for array

报这个错误,请大家帮帮忙解决一下

@chenchongthu
Copy link
Owner

没有遇到过这个问题,你是改代码了吗?如果不改的话是可以直接运行的

@morningnn
Copy link

因为我的环境是tf 2.0 py3.7 ,所以改了一些基本的语法。EHCF sin.py可以运行,就是EHCF.py出的问题。另外还想问一下作者大人,看你的论文时候就没懂EHCF sin和EHCF的区别是什么?就是没懂EHCF sin怎么来的?辛苦作者大人帮我解答一下疑惑。

@chenchongthu
Copy link
Owner

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]]

你看看是不是哪里改代码的时候改错了。

@morningnn
Copy link

感恩作者大人,明白啦,学到了很多,报错我再尝试改改

@chenchongthu
Copy link
Owner

不客气!觉得我们的方法有用的话点个星再走喽哈哈😆

@morningnn
Copy link

没问题,关注您,准备再学习下您的其他项目

@mawenye
Copy link

mawenye commented Jul 8, 2020

我想题主的问题是:你文章中的loss(公式5)是一些平方和的和,为什么输出的loss是负值?

@chenchongthu
Copy link
Owner

因为常数项对于求导是无用的可以消掉,你可以对比公式5和公式6,第一项为0或者1,那么它的展开后是一个常数,可以直接去掉。

@morningnn
Copy link

求作者大人解答下论文中公式2,他们是相乘吗?还有文章中提到的正数据positive data具体是什么意思呀

@chenchongthu
Copy link
Owner

@morningnn Hi,

(1)公式2里面是按位点乘(element-wise product of vectors)。
(2)文章中提到的positive data指的是在隐式反馈(implicit feedback)中存在的用户交互数据,如用户的点击、购买、和观看行为等。因为在隐式反馈数据中往往只存在有正反馈数据而没有负反馈数据,在训练模型时需要使用一些策略来产生负反馈数据。常用的有基于采样的(negative sampling)方法和非采样(non-sampling, whole-data)方法,而本文使用的是非采样策略。文章也通过实验展示了非采样训练方法对于提升推荐系统的表现是非常有效的。(另外如果还有问题的话可以重开一个issue哈)

@morningnn
Copy link

感恩作者大人

@enmuser
Copy link

enmuser commented Mar 10, 2021

因为我的环境是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

报这个错误,请大家帮帮忙解决一下

这个怎么解决的?

@yang0206
Copy link

因为我的环境是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:数组索引过多
报这个错误,请大家帮帮忙解决一下

这个怎么解决的?

请问你解决了吗?我也报了这个错误,没有改具体代码呀,就是改了一点点不适用的语法

@yang0206
Copy link

在dev_step中的文件“ G:\ git \ EHCF \ code \ EHCF.py”,行339
user_te2 = user_te [:, np.newaxis]

IndexError:数组索引过多

报这个错误,请大家帮帮忙解决一下

麻烦请问一下,这个问题,你解决了吗?我跟你情况一模一样呀,期待你的回复呀

@ShowTBC
Copy link

ShowTBC commented Jul 22, 2022

在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()为字典视图对象,不属于序列类型,应该使用类型转换构建序列类型。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants