求解矩阵的F范数

F范数的定义:A为 m ∗ m m*m mm的矩阵
∣ ∣ A ∣ ∣ F = ∑ i n ∑ j n a i j 2 \begin{aligned} ||A||_F=\sqrt{\sum_{i}^n{\sum_j^n}a_{ij}^2} \end{aligned} AF=injnaij2
即计算矩阵的每个元素的平方之后的加和然后开方。
  在矩阵分解问题中,为了优化所近似求解的矩阵,往往都会用到F范数作为损失函数的正则项。在matlab中求解范数的函数为norm(X, ‘fro’),在python中为numpy.linalg.norm(x,ord=None),其中x是求解的数值,ord是求解范数的类型,默认的是F范数其实也是二范数。
  在Pytorch中计算F范数的方法为torch.norm(X, ‘norm’),在深度学习中有时需要自定义损失函数就用到了F范数,如果自己不想重写函数的话完全可以用torch.nn.MSELoss定义。因为这两个函数的计算方法大体一致,主要区别就在于MSELoss(nn.MSELoss详解)的设置中是否除以样本数,以及F范数是否开方的问题。
下面看个例子:

import numpy as np
import torch
import torch.nn as nn


X = np.array([[1, 1, 1],
              [2, 2, 2],
              [3, 3, 3]])

Y = X*2

print(X)
[[1 1 1]
 [2 2 2]
 [3 3 3]]
print(Y)
[[2 2 2]
 [4 4 4]
 [6 6 6]]
a = np.linalg.norm(X-Y)
print(a*a)
42.0
X1 = torch.from_numpy(X)
Y1 = torch.from_numpy(Y)

loss_fn2 = torch.nn.MSELoss(reduction='sum')
loss2 = loss_fn2(X1.float(), Y1.float())
print(loss2)
tensor(42.)

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值