pytorch 模型输出特征 保存npy

实际落地操作时,需要将pytorch模型输出的特征保存成npy格式。

首先读取模型输出,将模型输出从GPU转换到CPU,并切换到numpy格式,新建numpy list保存所有结果,最后保存为npy格式。
 

创建一个tensor

a = torch.arange(10)
'''
tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
device(type='cpu') 默认在cpu上
'''

1. CPU tensor转GPU tensor:

cpu_imgs.cuda()

a = torch.arange(10).cuda()
'''
device(type='cuda', index=0) 调用cuda()方法后Tensor存储在gpu
'''

2. GPU tensor 转CPU tensor:

gpu_imgs.cpu()

a = torch.arange(10).cuda()
'''
device(type='cuda', index=0) 调用cuda()方法后Tensor在gpu上计算
'''
a = a.cpu()
'''
device(type='cpu') 调用cpu()方法后Tensor又重新回到cpu
'''


3. numpy转为CPU tensor:

torch.from_numpy( imgs )

4.CPU tensor转为numpy数据:

cpu_imgs.numpy()


5. note:GPU tensor不能直接转为numpy数组,必须先转到CPU tensor。

6. 如果tensor是标量的话,可以直接使用 item() 函数(只能是标量)将值取出来:

print loss_output.item()

numpy append()函数用于合并两个数组。它返回一个新数组, 并且原始数组保持不变。

umpy.append(arr, values, axis=None)

1)arr:array_like

这是一个ndarray。新值将附加到此数组的副本中。此参数是必需的, 并且在numpy.append()函数中起重要作用。

2)值:array_like

此参数定义附加到ndarray副本的值。这里要注意的是, 这些值必须具有与原始ndarray相同的形状(不包括轴)。如果未定义轴, 则值可以为任何形状, 并且在使用前将变平。

3)轴:int(可选)

此参数定义沿其附加值的轴。如果没有给它们轴, 则在使用前将ndarray和值都展平。

axis无定义

numpy.append(arr,values,axis=None):

返回由arr和values组成的新数组。axis是一个可选的值,当axis无定义时,返回总是为一维数组。

由下面的例子可以看出,不管两个数组是什么形式,返回的都是一维数组。

import numpy as np
 
HJL = np.append([1,2,3],[[4,5,6],[7,8,9]])
print(HJL)
# 当axis无定义时,是横向加成,返回总是为一维数组。
#[1 2 3 4 5 6 7 8 9]
 
HXH = np.append([[1,2],[3,4]],[[5,6,7],[8,9,10]])
print(HXH)
# [ 1  2  3  4  5  6  7  8  9 10]

axis=0的情况

axis=0,表示针对第1维进行操作,可以简单的理解为,加在了行上。所以行数增加,列数不变。

由此可知,列数必须保持相同。

axis=1的情况

拓展列,行数不变。行数需要相同。
主要记录二维矩阵的append用法
np.append(fea_neg,fea_pos,axis=0)#axis=0表示将两个矩阵上下堆叠,比如两个矩阵维度均为(3,4)则堆叠后为(6,4)
np.append(fea_neg,fea_pos,axis=1)#axis=1表示左右拼接,比如两个矩阵维度均为(3,4)则堆叠后为(3,8)

npy数据的保存与读取

保存

  利用这种方法,保存文件的后缀名字一定会被置为.npy

x = 10

numpy.save("data_x.npy",x)

读取    

  data = numpy.load("data_x.npy")
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值