Deep Knowledge Tracing(DKT)具体实现

2023-05-16

有关dkt可参考的文章http://blog.kintoki.me/2017/06/06/tensorflow-dkt/ 

 

问题陈述

传统的评价方法,如考试和考试,只允许在考试结束后对学生进行评价。因此,这些方法不允许在课程开始时对学生应具备或在课程中学习的所有预期能力进行完整的预先评估。
另一方面,预测模型能够根据历史数据预测未来的信息。从学习管理系统(LMS)收集的数据可以作为训练模型的基础,该模型能够预测学生是否有足够的知识来回答尚未发现的问题,这一问题被称为知识跟踪(KT)。
因此,可以训练LSTM网络,以找出数据集中已解决问题之间的依赖关系,并用它来预测学生正确回答他尚未看到的考试问题的概率。
综上所述,解决选择问题的策略主要包括四个步骤:

1.      下载包含已在其知识组件中分类的已解决问题的大型数据集。
2.      预处理数据并将输入转换为网络预期格式。
3.      建立和训练一个LSTM网络来预测学生正确回答未来问题的概率。
4.      评估模型并改进它。


指标

AUC:这个指标反映了模型区分正确回答和错误回答的能力,其中1.0分表示完全区分。

分析

数据探索

神经网络的监督训练需要一个数据集,其中的例子已经包含了预期的标签。因此,本项目使用最新版本的公共数据集“ASSISTments Skillbuilder data 2009-2010”[4],[5]中包含的示例。表1显示了关于这个数据集的一些统计信息。

表1——数据集统计 

此数据集有超过500.000个二进制问题(其中标签为1,正确,或0,不正确),其中大多数问题已被分类到一种类型的知识组件中。在所有可用属性中,知识构件是模型最重要的特征。在训练过程中,利用它找出问题之间的关系和依赖关系。因此,我们需要确保删除该属性中缺少值的那些问题。
通过分析数据集统计数据,可以看出我们有30个不同的属性可用。在所有这些属性中,只选择了三个属性来使用:用户标识符(“user_id”);问题知识组件的标识(“skill_id”);以及一个二进制变量(“correct”),用于指示学生是否正确地回答了问题。在表2中可以看到一个数据样本来更好地阐明整个想法。

探索性可视化

在这个数据集中要解决的一个重要问题是一个问题可以拥有的技能数量。在图1中,我们可以看到有些问题没有任何技能,而其他问题有一个或多个技能。我们可以调整模型或数据集来处理多技能问题,但如果没有技能标记,我们就不能有问题。因此,我们需要从数据集中删除所有没有技能的问题。

对于多技能问题,要以简单的方式处理这一问题,我们可以做两件事:将技能组合作为新的联合技能;或者将技能分成多个重复的响应序列,每个序列中只有一个技能。这个数据集附带了已经应用的第二种方法,为了简单起见,我们将继续使用这种方法。

图2-每解决一个问题的学生的频率

我们需要解决的另一个问题是每个学生解决的问题的数量。在图2中可以看到,有些学生只回答了一个问题(A类),而大多数学生回答的问题介于2到100个之间(B类)。我们还可以看到,我们有一些学生回答了600多个问题,这可能会导致我们由于记忆力不足而头痛。为了解决这一问题,我们可以将算法操作的时间窗口限制为一系列较小的问题。为了简单起见,我们在算法中按批处理提供数据,其中批处理中的每个问题序列将被填充为具有相同大小。

算法和技术

LSTM网络是一种考虑时间序列中元素间依赖关系的递归神经网络。由于学生正确回答问题B的概率取决于前一个问题是否正确回答,LSTM网络可能是本项目问题的可能解决方案。因此,我们将建立一个LSTM网路,以找出资料集中问题之间的关系,并预测学生正确回答未来问题的机率。在图3中,可以看到提议模型的架构。
为了构建模型,它使用了Keras,由于这个工具,我选择了一个 遮罩层是模型中的第一层。该层负责处理用于填充序列和填充不完整批次的掩码值。作为输入,该层将接收一批20个相同大小的序列(每个批的大小可能不同),其中包含246个特性。下一层是由250个单元组成的LSTM层。该层负责查找时间序列中问题之间的关系 

第三层是dropout层,为60%,有助于防止过度拟合。最后一层是使用SIGMOD激活函数,由123个神经元组成的dense层(123知识构成的类型数),。因此,预期的输出将是学生正确回答或不回答数据集中技能的概率。最后选择的两个参数是二进制交叉熵作为损失函数,Adagrad作为优化器。所有其他可以设置的参数都没有改变,其默认值可以在Keras文档[6]中找到。

输入编码

由于这种类型的网络只接受相同大小的输入数据,我们需要对“skill_ids”功能应用一个热编码,并将问题序列填充到相同的大小。为了使模型对学生回答正确与否的技能敏感,我们将在应用一个热编码之前将每个技能id与标签(问题答案)一起编码。因此,输入维度将是技能总数的2倍,其中有回答错误的技能ID和回答正确的技能ID。预期网络的输入是一个序列,包含学生解决的所有问题,如表3所示。

具体实现

数据预处理

分析数据集,我们发现在训练模型之前我们需要做一些预处理。让我们总结一下我们要做的:

1.      在没有技能id的情况下删除问题。
2.      将数据样本转换为按用户标识分组的序列。
3.      将技能id值转换为从零开始的连续变量。
4.      将数据分成三个数据集(培训、验证和测试)。
5.      将技能id与标签一起编码(问题答案)。
6.      应用一个热编码。
7.      填写不完整的批次。
8.      按相同的顺序填充

def load_dataset(fn, batch_size=32, shuffle=True):
    df = pd.read_csv(fn)

    if "skill_id" not in df.columns:
        raise KeyError(f"The column 'skill_id' was not found on {fn}")
    if "correct" not in df.columns:
        raise KeyError(f"The column 'correct' was not found on {fn}")
    if "user_id" not in df.columns:
        raise KeyError(f"The column 'user_id' was not found on {fn}")

    if not (df['correct'].isin([0, 1])).all():
        raise KeyError(f"The values of the column 'correct' must be 0 or 1.")

    # Step 1.1 - Remove questions without skill
    df.dropna(subset=['skill_id'], inplace=True)

    # Step 1.2 - Remove users with a single answer
    df = df.groupby('user_id').filter(lambda q: len(q) > 1).copy()

    # Step 2 - Enumerate skill id
    df['skill'], _ = pd.factorize(df['skill_id'], sort=True)

    # Step 3 - Cross skill id with answer to form a synthetic feature
    df['skill_with_answer'] = df['skill'] * 2 + df['correct']

    # Step 4 - Convert to a sequence per user id and shift features 1 timestep
    seq = df.groupby('user_id').apply(
        lambda r: (
            r['skill_with_answer'].values[:-1],
            r['skill'].values[1:],
            r['correct'].values[1:],
        )
    )
    nb_users = len(seq)

    # Step 5 - Get Tensorflow Dataset
    dataset = tf.data.Dataset.from_generator(
        generator=lambda: seq,
        output_types=(tf.int32, tf.int32, tf.float32)
    )

    if shuffle:
        dataset = dataset.shuffle(buffer_size=nb_users)

    # Step 6 - Encode categorical features and merge skills with labels to compute target loss.
    # More info: https://github.com/tensorflow/tensorflow/issues/32142
    features_depth = df['skill_with_answer'].max() + 1
    skill_depth = df['skill'].max() + 1

    dataset = dataset.map(
        lambda feat, skill, label: (
            tf.one_hot(feat, depth=features_depth),
            tf.concat(
                values=[
                    tf.one_hot(skill, depth=skill_depth),
                    tf.expand_dims(label, -1)
                ],
                axis=-1
            )
        )
    )

    # Step 7 - Pad sequences per batch
    dataset = dataset.padded_batch(
        batch_size=batch_size,
        padding_values=(MASK_VALUE, MASK_VALUE),
        padded_shapes=([None, None], [None, None]),
        drop_remainder=True
    )

    length = nb_users // batch_size
    return dataset, length, features_depth, skill_depth

在步骤1中,检测到66.326个样本需要从数据集中移除。步骤2生成了4.163个序列,而步骤3将技能id重新排列为[0 123]的连续间隔。在表5中,可以看到这些步骤之后的数据集摘要。
 

在第4步中,我们将前一步生成的序列分成三个序列:用于训练、验证和测试。它保留了20%的数据集用于测试,20%的剩余数据用于验证。在表6中可以看到每个数据集的摘要。


表 由于内存限制,每批执行步骤5-8。在步骤7中,不完整的批次用常量值-1填充,在步骤8中,序列按照其批次中的最大序列大小填充相同的常量。在步骤7-8中没有应用一个热编码,因为我们将在模型上使用一个遮罩层来处理它。

import numpy as np
import tensorflow as tf

from deepkt import data_util


class DKTModel(tf.keras.Model):
    """ The Deep Knowledge Tracing model.
    Arguments in __init__:
        nb_features: The number of features in the input.
        nb_skills: The number of skills in the dataset.
        hidden_units: Positive integer. The number of units of the LSTM layer.
        dropout_rate: Float between 0 and 1. Fraction of the units to drop.
    Raises:
        ValueError: In case of mismatch between the provided input data
            and what the model expects.
    """

    def __init__(self, nb_features, nb_skills, hidden_units=100, dropout_rate=0.2):
        inputs = tf.keras.Input(shape=(None, nb_features), name='inputs')

        x = tf.keras.layers.Masking(mask_value=data_util.MASK_VALUE)(inputs)

        x = tf.keras.layers.LSTM(hidden_units,
                                 return_sequences=True,
                                 dropout=dropout_rate)(x)

        dense = tf.keras.layers.Dense(nb_skills, activation='sigmoid')
        outputs = tf.keras.layers.TimeDistributed(dense, name='outputs')(x)

        super(DKTModel, self).__init__(inputs=inputs,
                                       outputs=outputs,
                                       name="DKTModel")

    def compile(self, optimizer, metrics=None):
        """Configures the model for training.
        Arguments:
            optimizer: String (name of optimizer) or optimizer instance.
                See `tf.keras.optimizers`.
            metrics: List of metrics to be evaluated by the model during training
                and testing. Typically you will use `metrics=['accuracy']`.
                To specify different metrics for different outputs of a
                multi-output model, you could also pass a dictionary, such as
                `metrics={'output_a': 'accuracy', 'output_b': ['accuracy', 'mse']}`.
                You can also pass a list (len = len(outputs)) of lists of metrics
                such as `metrics=[['accuracy'], ['accuracy', 'mse']]` or
                `metrics=['accuracy', ['accuracy', 'mse']]`.
        Raises:
            ValueError: In case of invalid arguments for
                `optimizer` or `metrics`.
        """

        def custom_loss(y_true, y_pred):
            y_true, y_pred = data_util.get_target(y_true, y_pred)
            return tf.keras.losses.binary_crossentropy(y_true, y_pred)

        super(DKTModel, self).compile(
            loss=custom_loss,
            optimizer=optimizer,
            metrics=metrics,
            experimental_run_tf_function=False)

    def fit(self,
            dataset,
            epochs=1,
            verbose=1,
            callbacks=None,
            validation_data=None,
            shuffle=True,
            initial_epoch=0,
            steps_per_epoch=None,
            validation_steps=None,
            validation_freq=1):
        """Trains the model for a fixed number of epochs (iterations on a dataset).
        Arguments:
            dataset: A `tf.data` dataset. Should return a tuple
                of `(inputs, (skills, targets))`.
            epochs: Integer. Number of epochs to train the model.
                An epoch is an iteration over the entire data provided.
                Note that in conjunction with `initial_epoch`,
                `epochs` is to be understood as "final epoch".
                The model is not trained for a number of iterations
                given by `epochs`, but merely until the epoch
                of index `epochs` is reached.
            verbose: 0, 1, or 2. Verbosity mode.
                0 = silent, 1 = progress bar, 2 = one line per epoch.
                Note that the progress bar is not particularly useful when
                logged to a file, so verbose=2 is recommended when not running
                interactively (eg, in a production environment).
            callbacks: List of `keras.callbacks.Callback` instances.
                List of callbacks to apply during training.
                See `tf.keras.callbacks`.
            validation_data: Data on which to evaluate
                the loss and any model metrics at the end of each epoch.
                The model will not be trained on this data.
            shuffle: Boolean (whether to shuffle the training data
                before each epoch)
            initial_epoch: Integer.
                Epoch at which to start training
                (useful for resuming a previous training run).
            steps_per_epoch: Integer or `None`.
                Total number of steps (batches of samples)
                before declaring one epoch finished and starting the
                next epoch. The default `None` is equal to
                the number of samples in your dataset divided by
                the batch size, or 1 if that cannot be determined. If x is a
                `tf.data` dataset, and 'steps_per_epoch'
                is None, the epoch will run until the input dataset is exhausted.
            validation_steps: Only relevant if `validation_data` is provided.
                Total number of steps (batches of
                samples) to draw before stopping when performing validation
                at the end of every epoch. If
                'validation_steps' is None, validation
                will run until the `validation_data` dataset is exhausted.
            validation_freq: Only relevant if validation data is provided. Integer
                or `collections_abc.Container` instance (e.g. list, tuple, etc.).
                If an integer, specifies how many training epochs to run before a
                new validation run is performed, e.g. `validation_freq=2` runs
                validation every 2 epochs. If a Container, specifies the epochs on
                which to run validation, e.g. `validation_freq=[1, 2, 10]` runs
                validation at the end of the 1st, 2nd, and 10th epochs.
        Returns:
            A `History` object. Its `History.history` attribute is
            a record of training loss values and metrics values
            at successive epochs, as well as validation loss values
            and validation metrics values (if applicable).
        Raises:
            RuntimeError: If the model was never compiled.
            ValueError: In case of mismatch between the provided input data
                and what the model expects.
        """
        return super(DKTModel, self).fit(x=dataset,
                                         epochs=epochs,
                                         verbose=verbose,
                                         callbacks=callbacks,
                                         validation_data=validation_data,
                                         shuffle=shuffle,
                                         initial_epoch=initial_epoch,
                                         steps_per_epoch=steps_per_epoch,
                                         validation_steps=validation_steps,
                                         validation_freq=validation_freq)

    def evaluate(self,
                 dataset,
                 verbose=1,
                 steps=None,
                 callbacks=None):
        """Returns the loss value & metrics values for the model in test mode.
        Computation is done in batches.
        Arguments:
            dataset: `tf.data` dataset. Should return a
            tuple of `(inputs, (skills, targets))`.
            verbose: 0 or 1. Verbosity mode.
                0 = silent, 1 = progress bar.
            steps: Integer or `None`.
                Total number of steps (batches of samples)
                before declaring the evaluation round finished.
                Ignored with the default value of `None`.
                If x is a `tf.data` dataset and `steps` is
                None, 'evaluate' will run until the dataset is exhausted.
                This argument is not supported with array inputs.
            callbacks: List of `keras.callbacks.Callback` instances.
                List of callbacks to apply during evaluation.
                See [callbacks](/api_docs/python/tf/keras/callbacks).
        Returns:
            Scalar test loss (if the model has a single output and no metrics)
            or list of scalars (if the model has multiple outputs
            and/or metrics). The attribute `model.metrics_names` will give you
            the display labels for the scalar outputs.
        Raises:
            ValueError: in case of invalid arguments.
        """
        return super(DKTModel, self).evaluate(dataset,
                                              verbose=verbose,
                                              steps=steps,
                                              callbacks=callbacks)

    def evaluate_generator(self, *args, **kwargs):
        raise SyntaxError("Not supported")

    def fit_generator(self, *args, **kwargs):
        raise SyntaxError("Not supported")

优化

为了更好地调整模型的参数,我不得不对其进行多次训练和评估。尝试中更改的主要参数有:

1.      优化器。
2.      批量大小。
3.      dropout。
4.      LSTM单元数。

它尝试了三种不同的优化器:RMSProp、Adam和Adagrad。三种不同的批量大小:10、20和32。三种不同的辍学率:60%、30%和50%。以及两个不同数量的LSTM单元:250和150。我的第一次尝试是:RMSProp;每批20个序列;60%的退出率;250个LSTM单元。

图4-所选优化器之间的比较

每一次试验的结果都是相似的,其中一次或另一次在验证损失上有微小的收益。每次尝试的日志可以在“logs”目录中找到,它们的摘要可以在excel文件中找到结果.xlsx“可以在同一目录中找到。在每次尝试中,最佳模型的权重也可以在“日志”中的相应目录中找到。它们可以用来验证我的结果,并与其他参数配置进行比较。

模型评估和验证

在图5中,可以看到使用上述模型配置的每个训练阶段的验证和训练损失以及验证AUC。在对测试数据进行验证和评估期间,该模型的最终结果见表8。
图5-每个epoch最终模型的演变。

从结果中可以看出,该模型很好地找到了数据集中问题之间的关系,从而完成了任务。将此结果与第2节中的PFA和BKT方法相比较,所提出的模型要好得多。同时,它在测试数据集上的AUC与相关工作中的DKT模型相似。

自由形式可视化

解决所选问题时需要考虑的一个非常重要的方面是问题技能id和标签的编码。如果特征不考虑标签,模型将很难找到问题与其期望标签之间的关系。我们做了一些实验来证明这一点,在图6中可以看到一个在没有这种编码的情况下训练的模型(模型a)和这个项目中提出的模型(模型B)之间的比较。
图6-在不编码技能id和标签的情况下训练的模型(a)与建议的模型(B)的比 

完整项目:https://github.com/chrispiech/DeepKnowledgeTracing

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

Deep Knowledge Tracing(DKT)具体实现 的相关文章

  • 吴恩达《神经网络与深度学习》课程笔记

    课堂笔记方便自己回忆 课程相关 课程地址见 https mooc study 163 com course 2001281002 info 该专项课程的Coursera地址 xff1a https www coursera org spec
  • matlab网页运行

    matlib软件巨大 xff0c 没有安装 找了几个在线网址 http www compileonline com execute matlab online php https octave online net
  • STM32入门教程——点亮一个LED

    STM32系列MCU被广泛的应用 xff0c 新学者想学习单片机或嵌入式时 xff0c 可以先从STM32入手 xff0c 本文介绍如何使用STM32单片机点亮一个LED 开发环境搭建 1 xff09 keil mdk安装 stm32系列M
  • MATLAB实验一 数字图像处理+函数调用笔记

    函数调用 https www cnblogs com gshang p 12763028 html 1 Write and test a MATLAB script file called lab1 plot m to plot the f
  • MATLAB学习之矩阵与幻方矩阵

    原文见https ww2 mathworks cn help matlab learn matlab matrices and magic squares html 上面为官方MATLAB原网址 xff0c 写此博客为方便复习回顾 矩阵和幻
  • matlab入门学习系列之表达式 变量运算符

    目录 变量 矩阵运算符 数组运算符 函数 表达式示例 变量 与大多数其他编程语言一样 xff0c MATLAB 语言提供数学表达式 xff0c 但与大多数编程语言不同的是 xff0c 这些表达式涉及整个矩阵 MATLAB 不需要任何类型声明
  • MATLAB入门学习系列之输入输出和索引

    取消输出 如果您在仅键入语句后按 Return 或 Enter xff0c MATLAB 会在屏幕上自动显示结果 但是 xff0c 如果使用分号结束行 xff0c MATLAB 会执行计算 xff0c 但不会显示任何输出 当生成大型矩阵时
  • MATLAB入门学习系列之基本绘图函数

    目录 创建绘图 在一幅图形中绘制多个数据集 指定线型和颜色 绘制线条和标记 将绘图添加到现有图形中 图窗窗口 在一幅图窗中显示多个绘图 控制轴 保存图窗 保存工作区数据 创建绘图 plot 函数具有不同的形式 xff0c 具体取决于输入参数
  • MATLAB入门学习系列之图像

    显示图像 图像数据 您可以将二维数值数组显示为图像 在图像中 xff0c 数组元素决定了图像的亮度或颜色 例如 xff0c 加载一个图像数组及其颜色图 xff1a gt gt load durer gt gt whos Name Size
  • 知识跟踪的深度知识跟踪和动态学生分类 Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing

    Deep Knowledge Tracing and Dynamic Student Classification for Knowledge Tracing xff08 译 xff09 知识跟踪的深度知识跟踪和动态学生分类 摘要 在智能辅
  • 知识追踪常见建模方法之IRT项目反应理论

    目录 A 项目反应理论 xff08 IRT item response theory xff09 概述 历史发展 特点 模型 A 项目反应理论 xff08 IRT item response theory xff09 概述 IRT理论即项目
  • MATLAB图像处理基本操作(1)

    matlib软件巨大 xff0c 没有安装 找了几个在线网址 http www compileonline com execute matlab online php https octave online net 从文件读取图像 a xf
  • Python学习系列之类的定义、构造函数 def __init__

    python def init self name等多参数 def init self 常见的两种类的定义方式如下 第一种 class Student def init self 两者之间的区别 self name 61 None self
  • ChatGPT,爆了!

    这段时间真是太刺激了 xff0c AI领域几乎每天都会爆出一个超震撼的产品 xff0c 有一种科幻马上要成现实的感觉 不知道大家朋友圈是什么样 xff0c 在整个创业的圈子里面 xff0c 几乎全是 AI 相关 就连 N 多年 xff0c
  • 分类回归模型评估常见方法及ROC AUC

    目录 模型评估常见方法 ROC和AUC定义 sklearn计算ROC具体实现 计算ROC需要知道的关键概念 1 分析数据 2 针对score xff0c 将数据排序 3 将截断点依次取为score值 3 1 截断点为0 1 sklearn
  • Coursera 吴恩达《Machine Learning》课堂笔记 + 作业

    记录一下最近学习的资源 xff0c 方便寻找 xff1a Github 上已经有人把作业整理成为 Python 的形式了 有 py 和 ipynb 两种格式 https github com nsoojin coursera ml py h
  • tensflow学习小知识tf.train.exponential_decay

    tf train exponential decay是tensflow1 X版本的2 版本使用以下语句 tf compat v1 train exponential decay 将指数衰减应用于学习率 tf compat v1 train
  • PyTorch学习系列之PyTorch:nn和PyTorch:optim优化

    PyTorch xff1a nn 在构建神经网络时 xff0c 我们经常考虑将计算分为几层 xff0c 其中一些层具有可学习的参数 xff0c 这些参数将在学习过程中进行优化 在TensorFlow xff0c 像包 Keras xff0c
  • tf.gather()用法详解

    tf gather params indices validate indices 61 None axis 61 None batch dims 61 0 name 61 None 请注意 xff0c 在CPU上 xff0c 如果找到超出
  • 代码学习之Python冒号详解

    最近看代码发现对冒号用法理解不够透彻 xff0c 记录学习一下 xff1a 1 冒号的用法 1 1 一个冒号 a i j 这里的i指起始位置 xff0c 默认为0 xff1b j是终止位置 xff0c 默认为len a xff0c 在取出数

随机推荐

  • Jupyter Notebook导入和删除虚拟环境 超详细

    记录一下Jupyter Notebook导入和删除虚拟环境的步骤 xff0c 网上博客参差不齐 xff0c 每次找好几个才看到简明容易理解的 方法一步骤 为不同的环境配置kernel 有时候使用conda命令创建了新的python环境 xf
  • tf.expand_dims用法详解

    看官方讲解一些博客感觉一直不是很懂 xff0c 下面是我的个人理解结合官方文档 xff0c 有问题欢迎指出 tf expand dims tf expand dims input axis 61 None name 61 None dim
  • argparse 命令行选项、参数和子命令解析器

    最近看到很多论文代码都是用解析器写的 argparse 命令行选项 参数和子命令解析器 argparse 模块可以让人轻松编写用户友好的命令行接口 程序定义它需要的参数 xff0c 然后 argparse 将弄清如何从 sys argv 解
  • torch.unsqueeze和 torch.squeeze() 详解

    1 torch unsqueeze 详解 torch unsqueeze input dim out 61 None 作用 xff1a 扩展维度 返回一个新的张量 xff0c 对输入的既定位置插入维度 1 注意 xff1a 返回张量与输入张
  • Android中获取唯一的id

    文章目录 Android唯一设备ID现状IMEIMAC地址唯一Id实现方案那些硬件适合硬件标识工具类 Android唯一设备ID现状 设备ID xff0c 简单来说就是一串符号 xff08 或者数字 xff09 xff0c 映射现实中硬件设
  • debian虚拟机下如何安装增强功能

    1 安装gcc和kernel headers gcc有可能默认安装的有 xff08 如果没有还需要安装gcc xff09 xff0c 但是还需要安装build essential sudo apt get install build ess
  • PyTorch学习系统之 scatter() 函数详解 one hot 编码

    torch Tensor scatter scatter 和 scatter 的作用是一样的 xff0c 只不过 scatter 不会直接修改原来的 Tensor xff0c 而 scatter 会 torch Tensor scatter
  • 最新RNN相关模型

    最近在看最新RNN相关模型 找到很多论文 Fundamentals of Recurrent Neural Network RNN and Long Short Term Memory LSTM network 递归神经网络 xff08 R
  • 知识追踪模型的应用

    背景 MOOC 近年来 xff0c 随着在线学习系统在教育环境中越来越普及 xff0c 在线学习人数越来越多 xff0c 教育者不可能追踪每一个学习者的知识状态并提供个性化的学习指导 xff1b 在线学习系统中的知识需要学习者通过各种冗余信
  • 自然语言处理之语料库

    语料库 定义 xff1a 语料库 corpus 就是存放语言材料的仓库 语言数据库 xff09 语料库技术的发展 早期 xff1a 语料库在语言研究中被广泛使用 xff1a 语言习得 方言学 语言教学 句法和语义 音系研究等 沉寂时期 xf
  • 知识追踪入门系列-论文资料汇总

    Paper xff1a 知识追踪相关论文 下载论文和代码见reference第一个链接 Deep Knowledge Tracing 首次提出将RNN用于知识追踪 xff0c 并能够基于复杂的知识联系进行建模 xff08 如构建知识图谱 x
  • 知识追踪方法比较

    DKT xff1a Deep knowledge tracing In Advances in neural information processing systems 这是一种开创性的方法 xff0c 它使用单层LSTM模型来预测学生的
  • 机器学习 注意力 笔记资料贴

    Self Attention与Transformer详解 https zhuanlan zhihu com p 47282410 写的非常详细 https jalammar github io illustrated transformer
  • 图像的几何变换maketform imtransform imresize imcrop

    背景 几何变换是将图像像素从一个位置映射到另一个位置 几何变换有五种常见类型 xff1a 剪切变换 平移变换 缩放变换 旋转变换和投影变换 它们如图4 1所示 在该图中 xff0c 原始图像显示在 A 中 xff0c 而变换后的图像显示在
  •  决策树(Decision Tree)原理及实现

    决策树 xff08 Decision Tree xff09 原理及实现 一 算法简介 1 1 基本模型介绍 决策树是一类常见的机器学习方法 xff0c 可以帮助我们解决分类与回归两类问题 模型可解释性强 xff0c 模型符合人类思维方式 x
  • Python 一维及多维数组及基本操作

    2 创建一般的多维数组 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 import numpy as np a 61 np array 1 2 3 dty
  • java操作word方式 设置国内镜像命令

    java操作word方式还有 个人认为通过jacob最好 xff0c 自己可以扩展 xff0c 网上除poi之外几乎全是java com技术实现的 1 Apache POI Java API To Access Microsoft Form
  • matlib 多种方法实现图像旋转不使用imrotate函数

    原理 方法很棒https blog csdn net qq 41140138 article details 104737705 方法一 function g 61 rotate image1 f theta M N 61 size f t
  • MATLAB实现满秩LU/QR等分解 及求方程组的解 范数

    矩阵分解 矩阵的LR分解 方阵A是非奇异的 clear A 61 2 1 4 4 3 13 2 2 20 format rat L U 61 lu A L U P 61 lu A 矩阵QR分解 Q R 61 qr A xff09 R为上三角
  • Deep Knowledge Tracing(DKT)具体实现

    有关dkt可参考的文章http blog kintoki me 2017 06 06 tensorflow dkt 问题陈述 传统的评价方法 xff0c 如考试和考试 xff0c 只允许在考试结束后对学生进行评价 因此 xff0c 这些方法