首页 > 其他分享 >TaxoRec部署与代码阅读

TaxoRec部署与代码阅读

时间:2024-03-10 18:33:40浏览次数:23  
标签:node 部署 代码 TaxoRec eval scores metric best

部署环境

  1. Pytorch 1.8.1
  2. Python 3.7.3
conda create -n pytorch-taxorec python=3.7.3
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch==1.8.1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple geoopt==0.2.0
::根据geoot文档,geoot0.2.0以上版本安装时会安装torch1.9.0,故使用0.2.0版本
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

遇到的问题

导入模块报错

发生异常: ModuleNotFoundError
No module named 'utils'
  File "C:\Users\13666\Desktop\tan\TaxoRec-master\models\model.py", line 6, in <module>
    from utils.helper import default_device
ModuleNotFoundError: No module named 'utils'

解决:
当导入模块时,Python解释器会搜索 sys.path 中的所有路径,如果找不到模块所在的路径就会报错,所以自定义模块要处于 sys.path 里才能被导入。
调试的时候的model.py位于\TaxoRec-master\models\目录下,所以sys.path包含当前执行的文件目录,而不包含utils文件夹目录,故找不到utils模块。

import sys
sys.path.append('C:\\Users\\13666\\Desktop\\tan\\TaxoRec-master')

tensor类型不匹配

Traceback (most recent call last):
  File "C:\Users\13666\Desktop\tan\TaxoRec-master\models\model.py", line 86, in decode
    emb_in = h[idx[:, 0]]
IndexError: tensors used as indices must be long, byte or bool tensors

解决:
idx转化为long类型,修改所有类似的代码

emb_in = h[idx[:, 0].long()]

UnboundLocalError

Traceback (most recent call last):
  File "C:\Users\13666\Desktop\tan\TaxoRec-master\models\model.py", line 169, in cluster_loss
    scores = scores / scores.max()
UnboundLocalError: local variable 'scores' referenced before assignment

出错代码:

if len(node) == 0 or len(node) == 1:
	continue
try:
	scores = node_list[i].scores.cuda(default_device())
except Exception as e:
	print(node_list[i].term_ids, k, i)
scores = scores / scores.max()

一个不太明白的报错,这里scores在try中已经有了定义,UnboundLocalError通常是局部变量未定义就使用导致的。

解决:

if len(node) == 0 or len(node) == 1:
	continue
try:
	scores = node_list[i].scores.cuda(default_device())
except Exception as e:
	print(node_list[i].term_ids, k, i)
	continue #test
scores = scores / scores.max()

不知道这样修改有没有隐式的风险。

代码运行

Epoch: 0799 6.710 time: 2.0359s 
0.0356  0.0588  0.0968  0.1589
0.042   0.0482  0.0605  0.0784
best_eval [0.06039383853310364, 0.09928730412048004, 0.04828638527394727, 0.0614728631325225]
best_eval [0.06039383853310364, 0.09928730412048004, 0.04828638527394727, 0.0614728631325225]

输出解读与代码思路

第一行输出代码

print(" ".join(['Epoch: {:04d}'.format(epoch),
                        '{:.3f}'.format(avg_loss),
                        'time: {:.4f}s'.format(time.time() - t)]), end=' ')

799为轮数,6.710为平均损失,2.0359s为第799轮训练时间

第二到五行输出代码

results = eval_rec(pred_matrix, data)
...
print('\t'.join([str(round(x, 4)) for x in results[0]]))
print('\t'.join([str(round(x, 4)) for x in results[-1]]))
print('best_eval', best_metric)
if unchange == 200:
	print('best_eval', best_metric)
	break

这里的eval_rec函数返回了recallndcg两个列表,分别代表了
Recall@5, Recall@10, Recall@20, Recall@50
以及
NDCG@5, NDCG@10, NDCG@20, NDCG@50的数值,即

0.0356  0.0588  0.0968  0.1589
0.042   0.0482  0.0605  0.0784

best_eval指的是整个系统的最佳性能,根据前面

recalls = results[0]
if recalls[1] > best_metric[0]:
    best_metric[0] = recalls[1]
    best_metric[2] = results[1][1]
    torch.save(model.state_dict(), save_path)
    unchange = 0
if recalls[2] > best_metric[1]:
    best_metric[1] = recalls[2]
    best_metric[3] = results[1][2]
    torch.save(model.state_dict(), save_path)
    unchange = 0
else:
    unchange += args.eval_freq

可以得出best_metric中存储的分别为[Recall@10,Recall@20,NDCG@10,NDCG@20]的最大值,和数据基本吻合。

image

参考资料:

Melinda315/TaxoRec (github.com)

Releases · geoopt/geoopt (github.com)

解决Python导入自定义模块时ModuleNotFoundError问题

标签:node,部署,代码,TaxoRec,eval,scores,metric,best
From: https://www.cnblogs.com/exungsh/p/18064553

相关文章

  • Ubuntu 22.04内核代码下载、编译、调试
    1下载Ubuntu Kernel参考《Kernel/Dev/KernelGitGuide-UbuntuWiki》,下载Ubuntu22.04代码:gitclonehttps://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy2修改、编译、安装UbuntuKernel参考《Kernel/BuildYourOwnKernel-UbuntuWiki》。......
  • 【性能测试】性能测试各知识第1篇:性能测试大纲【附代码文档】
    性能测试完整教程(附代码资料)主要内容讲述:性能测试大纲。。。。。。。。。。。。。。全套笔记资料代码移步:前往gitee仓库查看感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~性能测试大纲序号阶段概述01入门1.认识性能测试分类-(负载测试、压力测试、并发测试、......
  • 代码随想录 第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之
    leetcode:110.平衡二叉树-力扣(LeetCode)classSolution{publicbooleanisBalanced(TreeNoderoot){returngetblan(root)!=-1;}privateintgetblan(TreeNoderoot){//为空退出if(root==null)return0;//左节......
  • 使用 Docker 部署 Next Terminal 轻量级堡垒机
    1)NextTerminal介绍官网:https://next-terminal.typesafe.cn/GitHub:https://github.com/dushixiang/next-terminal想必经常玩服务器的都了解过堡垒机,类似于跳板机,但与跳板机的侧重点不同。堡垒机的主要功能是控制和监控对内部网络的远程访问。它提供严格的访问控制、会话审计......
  • 【Django开发】0到1美多商城项目md教程第1篇:欢迎来到美多商城!【附代码文档】
    本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django+Jinja2模板引擎+Vue.js实现前后端逻辑,Nginx服务器(反向代理)Nginx服务器(静态首页、商品详情页、uwsg......
  • Istio安装及Bookinfo环境部署
    目录一.ServiceMesh服务网格1.服务代理模式2.什么是ServiceMesh二.部署Istio1.Istio概述2.Istio各版本支持的K8S版本3.下载指定版本的Istio4.配置Istio的环境变量5.安装Istio6.给命名空间添加标签三.部署示例应用1.部署Bookinfo示例应用2.查看部署结果3.验证服务是否部署成功四.......
  • 【Python使用】python高级进阶知识md总结第2篇:HTTP 请求报文,HTTP响应报文【附代码文
    python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件,Ubuntu操作系统,Linux内核及发行版,查看目录命令,切换目录命令,绝对路径和相对路径,创建、删除文件及目录命令,复制、移动文件及目录命令,终端命令格式的组成,查看命令帮助。HTTP请求报文,HTTP响应报文......
  • 从0-1搭建一个自动化部署平台
    以Java服务为例,说明如何搭建一个自动化部署平台DevOps。第一步:准备基础设施服务器:准备至少一台用于部署的服务器,推荐使用云服务提供商的虚拟机或容器服务。操作系统:安装Linux操作系统,如Ubuntu、CentOS等。网络:确保服务器可以访问互联网,以便下载所需的软件和工具。第二步:安......
  • KMP算法(基于代码随想录)的随笔
    KMPKMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。前缀表:起始位置到下标i之前(包括i)的子串中,有多大长度的相同前缀后缀。那么使用KMP可以解决两类经典问题:匹配问题:28.实现strStr()(opensnewwindow)重......
  • 使用docker搭建环境:安装tomcat、部署war包
     拉取上一步push的tomcat镜像,详见:https://www.cnblogs.com/uncleyong/p/18062439dockerpullregistry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0  war包传到服务器(war包在网盘) 运行容器dockerrun\--nameqzcsbj_tomcat4\-p8184:8080\-v/root/my_do......