Pycharm学习:torch.norm用法

二维张量的二范数求解过程

1、在dim=0上求解

代码示例:

import torch
score = torch.tensor([[1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]])
l2_norm = torch.norm(score, dim=0)
print(l2_norm)

输出结果如下:

tensor([1.7321, 3.4641, 5.1962, 6.9282])

解释:在哪一个维度上计算二范数,该维度消失。在(3,4)形状的张量上的第一维度计算时,结果为一个(1,4)形状的张量。计算过程是不管行,每一列的数据算二范数,构成最终结构的对应列的数据

2、在dim=1上求解

代码示例:

import torch
score = torch.tensor([[1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]])
l2_norm = torch.norm(score, dim=1)
print(l2_norm)

输出结果如下:

tensor([5.4772, 5.4772, 5.4772])

解释:在哪一个维度上计算二范数,该维度消失。在(3,4)形状的张量上的第二维度计算时,结果为一个(1,3)形状的张量。计算过程是不管列,每一行的数据算二范数,构成最终结构的对应列的数据

三维张量的二范数求解过程

1、在dim=0上求解

代码示例:

import torch
score = torch.tensor([[[1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]],
                     [[2.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]]])
l2_norm = torch.norm(score, dim=0)
print(l2_norm)

输出结果如下:

tensor([[2.2361, 2.8284, 4.2426, 5.6569], [1.4142, 2.8284, 4.2426, 5.6569], [1.4142, 2.8284, 4.2426, 5.6569]])

解释:示例张量维度为(2,3,4),在dim=0上求解二范数时,在dim=1上,dim=0的两个(3,4)矩阵对应行的对应列序号数据求二范数,进而得到结果张量的对应行的数据

2、在dim=1上求解

代码示例:

import torch
score = torch.tensor([[[1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]],
                     [[2.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]]])
l2_norm = torch.norm(score, dim=1)
print(l2_norm)

输出结果如下:

tensor([[1.7321, 3.4641, 5.1962, 6.9282], [2.4495, 3.4641, 5.1962, 6.9282]])

解释:示例张量维度为(2,3,4),在dim=1上求解二范数时,结果结构为(2,4)。保留了dim=0的结构(2),则在dim=0的两组矩阵中分别计算,在对应的(3,4)矩阵中,每一行对应列的数据求二范数,构成结果的对应矩阵的对应列。

3、在dim=2上求解

代码示例:

import torch
score = torch.tensor([[[1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]],
                     [[2.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0],
                      [1.0, 2.0, 3.0, 4.0]]])
l2_norm = torch.norm(score, dim=2)
print(l2_norm)

输出结果如下:

tensor([[5.4772, 5.4772, 5.4772], [5.7446, 5.4772, 5.4772]])

解释:示例张量维度为(2,3,4),在dim=2上求解二范数时,结果结构为(2,3)。保留了dim=0的结构(2),则在dim=0的两组矩阵中分别计算,在对应的(3,4)矩阵中,每一行的所有数据求二范数,构成结果的对应矩阵的对应列。

作者:顾饶Leslie
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

修改一下这段代码在pycharm中的实现,import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim #from torchvision import datasets,transforms import torch.utils.data as data #from torch .nn:utils import weight_norm import matplotlib.pyplot as plt from sklearn.metrics import precision_score from sklearn.metrics import recall_score from sklearn.metrics import f1_score from sklearn.metrics import cohen_kappa_score data_ = pd.read_csv(open(r"C:\Users\zhangjinyue\Desktop\rice.csv"),header=None) data_ = np.array(data_).astype('float64') train_data =data_[:,:520] train_Data =np.array(train_data).astype('float64') train_labels=data_[:,520] train_labels=np.array(train_data).astype('float64') train_data,train_data,train_labels,train_labels=train_test_split(train_data,train_labels,test_size=0.33333) train_data=torch.Tensor(train_data) train_data=torch.LongTensor(train_labels) train_data=train_data.reshape(-1,1,20,26) train_data=torch.Tensor(train_data) train_data=torch.LongTensor(train_labels) train_data=train_data.reshape(-1,1,20,26) start_epoch=1 num_epoch=1 BATCH_SIZE=70 Ir=0.001 classes=('0','1','2','3','4','5') device=torch.device("cuda"if torch.cuda.is_available()else"cpu") torch.backends.cudnn.benchmark=True best_acc=0.0 train_dataset=data.TensorDataset(train_data,train_labels) test_dataset=data.TensorDataset(train_data,train_labels) train_loader=torch.utills.data.DataLoader(dtaset=train_dataset,batch_size=BATCH_SIZE,shuffle=True) test_loader=torch.utills.data.DataLoader(dtaset=train_dataset,batch_size=BATCH_SIZE,shuffle=True)
07-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值