深度知识追踪(DKT)实现pytorch(及常见问题)

2023-05-16

发现代码跑了几遍还是没有自己按照思路写一遍清楚

参考代码

GitHub - dxywill/deepknowledgetracing: Pytorch implementation for Deep Knowledge tracing

论文 https://web.stanford.edu/~cpiech/bio/papers/deepKnowledgeTracing.pdf

数据集介绍

数据形式三行(第一行:答题数
第二行:题目编号(从0开始)
第三行:答题结果,0表示错,1表示对)

data.py

import csv
import random


def load_data(fileName):
    rows = []
    max_skill_num = 0  # max_skill_num是知识点(题目)个数
    max_num_problems = 0  # max_num_problems最长题目序列

    with open(fileName, "r") as csvfile:#打开文件
        reader = csv.reader(csvfile, delimiter=',')
        for row in reader:
            rows.append(row)
    index = 0
    print("the number of rows is " + str(len(rows)))
    tuple_rows = []
    #turn list to tuple
    while(index < len(rows)-1):
        problems_num = int(rows[index][0])
        tmp_max_skill = max(map(int, rows[index+1]))
        if(tmp_max_skill > max_skill_num):
            max_skill_num = tmp_max_skill
        if(problems_num <= 2):#去除了题目小于两个的数据
            index += 3
        else:
            if problems_num > max_num_problems:
                max_num_problems = problems_num
            tup = (rows[index], rows[index+1], rows[index+2])## tup:[题目个数, 题目序列, 答对情况]
            tuple_rows.append(tup)
            index += 3
    #shuffle the tuple
    random.shuffle(tuple_rows)
    print("The number of students is ", len(tuple_rows))
    print("max_skill_num  ", max_skill_num)
    print("max_num_problems  ", max_num_problems)
    print("Finish reading data")
    return tuple_rows, max_num_problems, max_skill_num+1
    #  skill序号从0开始所以最长题目序列为max_skill_num+1
# if __name__ == '__main__':
#     train_data_path='data/test1.csv'
#     load_data(train_data_path)

模型 

class DeepKnowledgeTracing(nn.Module):
    def __init__(self, input_size, hidden_size, num_skills, nlayers, dropout=0.6, tie_weights=False):
        super(DeepKnowledgeTracing, self).__init__()

        
        self.rnn = nn.LSTM(input_size, hidden_size, nlayers, batch_first=True, dropout=dropout)
        # self.rnn = nn.RNN(input_size, hidden_size, nlayers, nonlinearity='tanh', dropout=dropout)

        # nn.Linear是一个全连接层,hidden_size是输入层维数,num_skills是输出层维数
        # decoder是隐层(self.rnn)到输出层的网络
        self.decoder = nn.Linear(hidden_size, num_skills)
        self.nhid = hidden_size
        self.nlayers = nlayers

    # 前向计算, 网络结构是:input --> hidden(self.rnn) --> decoder(输出层)
    # 这里需要注意:在pytorch中,rnn的输入格式已经和tensorflow的rnn不太一样,具体见官网:
    # https://pytorch.org/docs/stable/generated/torch.nn.RNN.html?highlight=rnn#torch.nn.RNN
    # 根据官网,torch.nn.RNN接收的参数input形状是[时间步数, 批量大小, 特征维数], hidden: 旧的隐藏层的状态
    def forward(self, input, hidden):
        # output: 隐藏层在各个时间步上计算并输出的隐藏状态, 形状是[时间步数, 批量大小, 隐层维数]
        output, hidden = self.rnn(input, hidden)
        # decoded: 形状是[时间步数, 批量大小, num_skills]
        decoded = self.decoder(output.contiguous().view(output.size(0) * output.size(1), output.size(2)))
        return decoded, hidden

可改进的地方

其他代码与其的不同的地方

可参考文章:DKT学习_qq_40282662的博客-CSDN博客

Deep Knowledge Tracing [Pytorch] | 一切皆可解读 (chsong.live)

torch.optim.Adam(model.parameters(), lr=lr ,eps=args.epsilon)

影响模型效果的因素

学习率,batchsize 一般设置为8的倍数 还有epsilon不要过大 0.01或0.001都可

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度知识追踪(DKT)实现pytorch(及常见问题) 的相关文章

  • python刷题之集合、哈希表常见操作及练习

    集合 集合是一个无序不重复元素的集 基本功能包括关系测试和消除重复元素 可以用大括号 创建集合 注意 xff1a 如果要创建一个空集合 xff0c 你必须用 set 而不是 xff1b 后者创建一个空的字典 xff0c 下一节我们会介绍这个
  • 用selenium爬取拉勾网职位信息及常见问题处理

    初步爬虫框架构造 下面采用selenium进行爬虫 xff0c 首先构造一下爬虫的框架 xff0c 将整个程序构造为一个类 xff0c 其中主要包括 xff1a 获取每个详细职位信息的链接 xff08 parse page url xff0
  • Scrapy爬虫快速入门

    Scrapy快速入门 Scrapy框架模块功能 xff1a Scrapy Engine xff08 引擎 xff09 xff1a Scrapy框架的核心部分 负责在Spider和ItemPipeline Downloader Schedul
  • 嵌入式系统USB CDROM虚拟光驱驱动程序开发

    带U盘功能的的USB接口设备已经越来越常见了 如果能够把产品说明书或者产品设备驱动程序做成一个USB CDROM xff0c 那该多方便 假设 xff1a 你已经有了USB mass storage驱动 你的任务是在此基础上增加一个USB
  • Redis集群原理详解

    一 Redis集群介绍 xff1a 1 为什么需要Redis集群 xff1f 在讲Redis集群架构之前 xff0c 我们先简单讲下Redis单实例的架构 xff0c 从最开始的一主N从 xff0c 到读写分离 xff0c 再到Sentin
  • python刷题之快慢指针与二分查找

    141 环形链表 难度简单986 给定一个链表 xff0c 判断链表中是否有环 如果链表中有某个节点 xff0c 可以通过连续跟踪 next 指针再次到达 xff0c 则链表中存在环 为了表示给定链表中的环 xff0c 我们使用整数 pos
  • LeetCode每日一题

    191 位1的个数 难度简单290 编写一个函数 xff0c 输入是一个无符号整数 xff08 以二进制串的形式 xff09 xff0c 返回其二进制表达式中数字位数为 39 1 39 的个数 xff08 也被称为汉明重量 xff09 提示
  • scrapy模拟豆瓣登录

    看的课程是21天搞定分布式爬虫 xff0c 应该是几年前的了 xff0c 课程当时还是验证码 xff0c 现在登录和之前都不一样了现在需要你拖动滑块完成拼图 之前的页面 现在验证码都变成拼图了 学学原理吧 首先创建scrapy项目 首先进入
  • 利用Scrapy框架爬取汽车之家图片(详细)

    爬取结果 爬取步骤 创建爬虫文件 进入cmd命令模式下 xff0c 进入想要存取爬虫代码的文件 xff0c 我这里是进入e盘下的E pystudy scraping文件夹内 C Users wei gt E E gt cd E pystud
  • Scrapy框架下载器和随机请求头

    下载器中间键可以为我们设置多个代理ip与请求头 xff0c 达到反反爬虫的目的 下面是scrapy为我们创建好的中间件的类 Process request self request spider 参数 request 发送请求的reques
  • scrapy爬取完整网页完整数据,简书(最新)

    需求 xff1a 简书网站整站爬虫 数据保存到mysql数据库中 将seleniume 43 chromedriver集成到scrapy 爬取结果如下 xff1a 安装Selenium和chromedriver xff1a https bl
  • 图和图的基本知识

    1 1 图的表示 1 2 图的特性 子图Subgraph 连通分量Connected Component 接通图Connected Graph 最短路径Shortest Path 图直径Diameter 1 3 图中心性 Centralit
  • BFS和DFS的python实现(要记住)

    BFS DFS python模板与实现 BFS模板 1 无需分层遍历 while queue 不空 xff1a cur 61 queue pop for 节点 in cur的所有相邻节点 xff1a if 该节点有效且未访问过 xff1a
  • BFS与 DFS题目练习(python)

    107 二叉树的层序遍历 II 难度中等423 给定一个二叉树 xff0c 返回其节点值自底向上的层序遍历 xff08 即按从叶子节点所在层到根节点所在的层 xff0c 逐层从左向右遍历 xff09 例如 xff1a 给定二叉树 3 9 2
  • LeetCode每日一题-合并两个有序数组

    88 合并两个有序数组 难度简单878 给你两个有序整数数组 nums1 和 nums2 xff0c 请你将 nums2 合并到 nums1 中 xff0c 使 nums1 成为一个有序数组 初始化 nums1 和 nums2 的元素数量分
  • debian 系统无声音

    系统识别了硬件 xff0c 加载了内核 可是就是没声音 在基础条件都满足的情况下 xff0c 尝试输入 xff1a sudo alsactl init 反正我是一输入声音就出来了 转载于 https my oschina net skyoo
  • 爬虫实战-爬取房天下网站全国所有城市的新房和二手房信息(最新)

    看到https www cnblogs com derek1184405959 p 9446544 html项目 xff1a 爬取房天下网站全国所有城市的新房和二手房信息和其他博客的代码 xff0c 因为网站的更新或者其他原因都不能正确爬取
  • pytorch 模型保存与加载 cpu转GPU

    model eval 的重要性 在2 中最后用到了model eval 是因为 只有在执行该命令后 34 dropout层 34 及 34 batch normalization层 34 才会进入 evalution 模态 而在 34 训练
  • 数据分析及数据分析的工作流程

    1 什么是数据分析 数据分析是根据业务问题 xff0c 对数据进行收集 xff0c 清洗 xff0c 处理和建模的过程 xff0c 用于识别有助于业务的信息 xff0c 获取关键业务结论并辅助决策 界定业务问题 xff08 以宜家为例 xf
  • SQL练习网站

    之前上过数据库的课程 xff0c 但感觉零零散散 xff0c 现在已经不记得多少 xff0c 一方面是没有总结另一方面是没有练习 https sqlbolt com 但感觉网页加载的很慢 但我发现以上两者结合起来棒棒哒 有中文 xff0c

随机推荐

  • SQL入门(二)查询执行顺序

    完整查询 SELECT DISTINCT column AGG FUNC column or expression FROM mytable JOIN another table ON mytable column 61 another t
  • SQL入门之基本语法

    下面是为了方便查考在GitHub上找到的一个教程 目录 开始使用 登录MySQL创建数据库创建数据库表增删改查 SELECTUPDATEINSERTDELETEWHEREAND 和 OR ANDORORDER BYINNOTUNIONASJ
  • python有向图,无向图绘制

    https www jianshu com p 52bb142314ebR语言画网络图 https blog csdn net fly hawk article details 78513257 python绘制无向图 xff0c 输入数据
  • 知识追踪待解决问题记录-交流贴

    记录遇到知识追踪的问题 xff0c 欢迎大家进行留言交流 1 DKT中的图如何画的 好像是根据这个公式 但还没画出来 2 GKT跑的效果很差 可能原因是作者对数据的特殊处理 xff0c 作者的实验数据好像不是assistment的 后面有人
  • conda安装包遇到问题An unexpected error has occurred. Conda has prepared the above report.

    之前还没问题 xff0c 现在就 base C Users wei gt conda activate tensoflow1 tensoflow1 C Users wei gt conda install seaborn Collectin
  • Requests库爬取实例

    网络爬虫的盗亦有道 网络爬虫的尺寸 爬取网页 xff0c 玩转网页 xff1a 小规模 xff0c 数据量小 xff0c 爬取速度不敏感 xff1b Requests库 爬取网站 爬取系列网站 xff1a 中规模 xff0c 数据量较大 x
  • Java8两个集合(List)取交集、并集、差集、去重并集

    Java8两个集合 List 取交集 并集 差集 去重并集 java guava 集合的操作 xff1a 交集 差集 并集 span class token keyword import span span class token name
  • XML,JSON,YAML

    信息标记的三种形式 信息的标记 xff1a 标记后的信息可形成信息组织结构 xff0c 增加了信息维度 标记后的信息可用于通信 存储和展示 标记的结构与信息一样具有重要价值标记后的信息有利于程序理解和运用 HTML的信息标记 xff1a H
  • python爬虫 2021中国大学排名定向爬虫

    最近的几篇博客来源是之前我下载的一个课件 在网上搜索了一下是一下这个课程的 xff0c 可以结合视频博客以及代码去更好地学习 Python网络爬虫与信息提取 北京理工大学 中国大学MOOC 慕课 icourse163 org 但是课程内容的
  • 爬虫小案例之爬取京东商品链接

    观察URL翻页的变化 爬取页面URL如下 base url 61 39 https search jd com Search keyword 61 39 43 keyword for x in range 1 num 43 1 url 61
  • Tensorflow,pytorch查看模型参数,模型可视化

    参数结构打印 TensorFlow1 12的打印结构 xff1a for var in tf trainable variables print 34 Listing trainable variables 34 print var Ten
  • TensorFlow学习笔记(一)

    TensorFlow版本2发布后 xff0c 使用TensorFlow变得更简单和方便 xff0c 但看网上的很多代码是使用的TensorFlow1进行完成的 xff0c 每次遇到不懂的函数去查 xff0c 理解记忆的一般 xff0c 感觉
  • 图神经网络(GNN)资源帖视频及必读论文

    最近在看图神经网络 xff0c 发现了部分宝藏 图神经网络资源大集合 图神经网络资源大集合 快来打包带走 公众号 图与推荐的博客 CSDN博客 入门博客 xff1a 从图 Graph 到图卷积 Graph Convolution xff1a
  • 计算机网络要点归纳(一文带你快速掌握网络知识)

    计算机网络 谢希仁版 可以用来期末复习 xff0c 也可以用来回顾自测 xff0c 发现好多都设计的网络相关的的内容 xff0c 一起回顾学习吧 第一章概述 计算机网络的性能指标 xff1a 速率 比特为单位 Kb s K 61 10 3
  • Git学习笔记(代码版本管理)-超详细

    Git之前一直听说没有自己操作过 xff0c 偶尔写完程序的时候想起要不放到GitHub上 xff0c 然后看到操作也不简单呢 然后还是不想放弃 xff0c 听了 莫烦Python Git 代码版本管理教程听了一遍没动手 xff0c 就放到
  • Pycharm上传,更新本地代码到GitHub(常见问题及解决)

    上传本地代码到GitHub上 进入Pycharm主页 xff0c 打开pycharm File gt Setting gt version control 但可能报错 lnvalid authentication data Can 39 t
  • Improving Knowledge Tracing via Pre-training Question Embeddings

    Improving Knowledge Tracing via Pre training Question Embeddings 论文 xff1a Improving Knowledge Tracing via Pre training Q
  • java guava 集合的操作:交集、差集、并集

    Java8两个集合 List 取交集 并集 差集 去重并集 java guava 集合的操作 xff1a 交集 差集 并集 开源地址 xff1a https github com google guava jar包下载 xff1a http
  • 知识追踪数据集介绍

    困扰了我很久的问题 xff0c 可能是我喜欢知根知底 见到论文中提到的2009 2010 xff0c 看到代码中是数据不太一样发出了疑问 最新 xff1a 超详细介绍 DataSet EduData documentation https
  • 深度知识追踪(DKT)实现pytorch(及常见问题)

    发现代码跑了几遍还是没有自己按照思路写一遍清楚 参考代码 GitHub dxywill deepknowledgetracing Pytorch implementation for Deep Knowledge tracing 论文 ht