GKT模型代码详细解析二(数据处理以及层的构建)

首先是数据处理的代码:总体思路

代码将DataFrame对象转换为了张量,并将张量打包成数据加载器(DataLoader)对象。最后,函数返回图谱中的概念数量、静态图(如果graph_type为'Dense'、'Transition'或'DKT'则存在)、训练数据加载器、验证数据加载器和测试数据加载器。

processing.py的代码分块解释

class KTDataset(Dataset):
    def __init__(self, features, questions, answers):
        # 这些参数分别是由feature、question、answer组成的列表,每个元素对应于一个学生在一次考试中的一条记录
        super(KTDataset, self).__init__()
        self.features = features
        self.questions = questions
        self.answers = answers

    def __getitem__(self, index):
        # 在数据集对象被索引调用的时候,它接收一个index参数(是一个样本的索引),并返回对应与该索引的记录的feature、question、answer
        # 即指定调用dataset[i]时,得到'i'索引下的sample
        # 该方法返回一个三元组(self.features[index], self.questions[index], self.answers[index]),对应dataset中的每一个样本的特征、问题、答案
        return self.features[index], self.questions[index], self.answers[index]

    def __len__(self):
        # 记录数据特征数量
        return len(self.features)


def pad_collate(batch):
    (features, questions, answers) = zip(*batch)
    # 将每一个batch元组中的每个元素(features, questions, answers)解压生成三个对应的列表
    features = [torch.LongTensor(feat) for feat in features]
    questions = [torch.LongTensor(qt) for qt in questions]
    answers = [torch.LongTensor(ans) for ans in answers]
    # 再将每个列表的元素转为torch.LongTensor类型
    feature_pad = pad_sequence(features, batch_first=True, padding_value=-1)
    question_pad = pad_sequence(questions, batch_first=True, padding_value=-1)
    answer_pad = pad_sequence(answers, batch_first=True, padding_value=-1)
    # pad_sequence函数是PyTorch中的函数,用于将一个batch的数据按照序列长度进行padding,使得它们的长度都一样,以便于输入到神经网络中。
    # 使用pad_sequence函数将他们进行填充,并转换为一个batch的向量
    # 转换后再进行pad打包成一个tuple,作为函数的返回值
    return feature_pad, question_pad, answer_pad

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Babulalala_lyn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值