pytorch repeat 使用详解

repeat可以完成指定维度上的复制,通过不同的复制方法以及与view的混用,能完成向量之间的两两交互,在与推荐系统有关实际使用中,repeat可以这样用:
假设有一个item_emb矩阵,形状是[2,2,4],代表了2位用户,每个用户有2个感兴趣的商品,每个商品可以用4维向量表示:

item_emb:
tensor([
        [[0.5764, 0.8429, 0.5437, 0.9735],
         [0.8917, 0.5450, 0.7866, 0.6392]],
         
        [[0.4026, 0.7241, 0.6565, 0.0908],
         [0.2610, 0.4071, 0.0021, 0.4405]]
       ])

现在令:

repeat1=item_emb.repeat(1,1,2)
repeat2=item_emb.repeat(1,2,1)

repeat1=repeat1.view(2,-1,4)

可以得到repeat1:repeat1表示2位用户有4个感兴趣的商品,每两个相邻的商品是重复的。

repeat1: 
tensor([
         [[0.5764, 0.8429, 0.5437, 0.9735],
         [0.5764, 0.8429, 0.5437, 0.9735],
         [0.8917, 0.5450, 0.7866, 0.6392],
         [0.8917, 0.5450, 0.7866, 0.6392]],
         
        [[0.4026, 0.7241, 0.6565, 0.0908],
         [0.4026, 0.7241, 0.6565, 0.0908],
         [0.2610, 0.4071, 0.0021, 0.4405],
         [0.2610, 0.4071, 0.0021, 0.4405]]
        ])

类似的,repeat2:也表示2位用户对4个商品感兴趣,但是这次商品的排列就不同了,请和item_emb对比一下。

repeat2

tensor([
         [[0.5764, 0.8429, 0.5437, 0.9735],
         [0.8917, 0.5450, 0.7866, 0.6392],
         [0.5764, 0.8429, 0.5437, 0.9735],
         [0.8917, 0.5450, 0.7866, 0.6392],
],
         
        [[0.4026, 0.7241, 0.6565, 0.0908],
         [0.2610, 0.4071, 0.0021, 0.4405],
         [0.4026, 0.7241, 0.6565, 0.0908],
         [0.2610, 0.4071, 0.0021, 0.4405]]
        ])

经过了repeat操作,得到的两个矩阵repeat1和repeat2,如果相乘(repeat1*repeat2按位乘),就能得到一个新的[2,4,4]的矩阵,
其中的第一项是[1,4,4]的,1代表用户1,第二个‘4’代表每个物品的维度;**第一个‘4’代表用户1感兴趣的商品的两两交互(逐元素乘),因为用户有两个感兴趣物品,所以两两交互有4项,**如果用户有3个感兴趣商品,那么第一个‘4’就应该换成9.

你可能感兴趣的:(python,深度学习)