DKVMN 具有维持用户概念状态和概念更新的能力
对于俺的项目书来说 作用十分的大
在阅读模型代码文件时 产生了一些问题 在这里写一下
pytorch维度广播
如果一个Pytorch运算支持广播的话,那么就意味着传给这个运算的参数会被自动扩张成相同的size,在不复制数据的情况下就能进行运算,整个过程可以做到避免无用的复制,达到更高效的运算。
广播机制实际上是在运算过程中,去处理两个形状不同向量的一种手段。
pytorch中的广播机制和numpy中的广播机制一样, 因为都是数组的广播机制。
如果两个数组的shape不同,就会触发广播机制
1)程序会自动执行操作使得A.shape==B.shape;
2)对应位置进行相加运算,结果的shape是:A.shape和B.shape对应位置的最大值,比如:A.shape=(1,9,4),B.shape=(15,1,4),那么A+B的shape是(15,9,4)
条件
- 两个张量都至少有一个维度
- 从右往左顺序看两个张量的每一个维度,x和y每个对应着的两个维度都需要能够匹配上
2.条件细致的说一下
1 维度可以和任何维度进行匹配
维度可以随意产生1来进行维度的对应
1 | x=torch.empty(5,3,4,1) |
看看上面对应的例子
从右往左看
是一一对应的 那就符合广播机制
chuck
它是将tensor按dim(行或列)分割成chunk_num个tensor块,返回的是一个元组。 torch.chunk(tensor,chunk数,维度)
chunks=n 代表切分成几个小块
dim= n代表要在哪个维度一进行操作
torch.ge
torch.ge(a,b)比较a,b的大小,a为张量,b可以为和a相同形状的张量,也可以为一个常数。
mask_select
一般配个torch.ge使用
1 | import torch |
torch.t()
求转置矩阵
mul matmul mm
mul 是矩阵对应位相乘 a,b的维度必须满足广播才行
mm 是矩阵相乘 最正常的情况
matmul = mm