推荐系统笔记(十五):pytorch/tensorflow添加随机均匀噪声

未添加噪声的原代码:

 emb = torch.sparse.mm(mat, emb)
 emb_list.append(emb)

        我们的目标是向矩阵相乘后的结果emb添加随即均匀噪声,并添加到emb_ist中保存。

具体实现如下:

pytorch:

emb = torch.sparse.mm(mat, emb)
random_noise=torch.empty(emb.shape).uniform_().to(self.device)
emb+=torch.mul(torch.sign(emb),torch.nn.functional.normalize(random_noise,p=2,dim=1))* self.eps
emb_list.append(emb)

        其中的random_noise就是生成的噪声,self.eps是噪声占比,是一个超参数,可以任意调节,

        uniform_代表的是torch中的内置均匀分布函数,参数解释如下:

torch.nn.functional.normalize(input, p=2.0, dim=1, eps=1e-12, out=None)

        input: 输入。

        shape: 计算p范数。

        dim: 计算范数的维度。

        eps: 很小的数,防止分母为0。

        out: 输出。

Tensorflow:

emb = tf.sparse_tensor_dense_matmul(adj, emb)
random_noise = tf.random.uniform(emb.shape)
emb += tf.multiply(tf.sign(emb),tf.nn.l2_normalize(random_noise, 1)) * self.eps
all_embs.append(emb)

        其中的random_noise就是生成的噪声,self.eps是噪声占比,是一个超参数,可以任意调节,uniform代表的是tensorflow中的内置均匀分布函数,其参数解释如下:

random_uniform(
    shape,
    minval=0,
    maxval=None,
    dtype=tf.float32,
    seed=None,
    name=None
)

shape:一维整数张量或 Python 数组.输出张量的形状。

minval:dtype 类型的 0-D 张量或 Python 值;生成的随机值范围的下限;默认为0。

maxval:dtype 类型的 0-D 张量或 Python 值。

要生成的随机值范围的上限。如果 dtype 是浮点,则默认为1 。

dtype:输出的类型:float16、float32、float64、int32、orint64。

seed:一个 Python 整数。用于为分布创建一个随机种子。查看 tf.set_random_seed 行为。

name:操作的名称(可选)。

        l2_normalize是functional中的内置L2正则化或者说归一化函数,其中重要的参数是前两个,x是数据张量,axis是指定要在哪一维度上进行归一化,这里axis=1表示在行上操作。

参考链接:

Pytorch/Tensorflow:产生某个范围内均匀分布的随机tensor_道纪书生的博客-CSDN博客_tensorflow 随机tensor

你可能感兴趣的:(推荐系统,pytorch,tensorflow,深度学习,机器学习,python)