|
09、pytorch中(指数与L2)归一化的几种实现
- # -*- coding: utf-8 -*-
- __author__ = u'东方耀 微信:dfy_88888'
- __date__ = '2020/6/5 上午8:41'
- __product__ = 'PyCharm'
- __filename__ = 'dfy_demo01'
- import torch
- import torch.nn.functional as F
- import numpy as np
- import math
- # 需要对特征向量进行归一化 p=2就是l2归一化吗?
- # x = F.normalize(x, p=2, dim=1)
- def l2_norm(input, axis=1):
- norm = torch.norm(input, p=2, dim=axis, keepdim=True)
- print("欧式距离p=2:", norm)
- output = torch.div(input, norm)
- return output
- a = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32)
- t = torch.from_numpy(a)
- print(t, t.size())
- # 2*3 2个样本 特征向量维度为3
- # softmax本身就是指数的归一化函数
- print("指数的归一化:", F.softmax(t, dim=1))
- print("指数的归一化后取对数", F.log_softmax(t, dim=1))
- #
- # 下面自己用数学公式实现
- fenzi = math.exp(1)
- fenmu = math.exp(1) + math.exp(2) + math.exp(3)
- print(fenzi / fenmu)
- print(math.log(fenzi /fenmu))
- print("*"*50)
- # dim=1 还是列的方向 就是一行
- print("L2的归一化:", F.normalize(t, p=2, dim=1))
- print("手动计算:", 1.0 / (math.sqrt(1*1 + 2*2 + 3*3)))
- print(l2_norm(t, axis=1))
- # torch.norm 计算各种距离 p=2欧式距离
- # torch.nn.functional.normalize() 归一化
- # pytorch中(指数与L2)归一化的几种实现
复制代码
|
|