Pytorch搭建神经网络语法笔记

该博客介绍了如何读取JSON文件并解析类别信息,同时详细解释了PyTorch模型在评估模式下获取参数的方法,包括`.data.cpu().numpy().item()`和`numpy.squeeze()`的使用,这些步骤常用于权重提取和模型分析。
摘要由CSDN通过智能技术生成

读取json文件

json_path = 'E:\pythonProject\CAM\cam\labels.json'
with open(json_path, 'r') as load_f:
    load_json = json.load(load_f)
classes = {int(key): value for (key, value)
           in load_json.items()}
  • #print(load_json) {‘0’: ‘tench, Tinca tinca’, ‘1’: ‘goldfish, Carassius auratus’,
  • #print(load_json.items())字典键值对,dict_items([(‘0’, ‘tench, Tinca tinca’), (‘1’, ‘goldfish, Carassius auratus’),
  • #print(classes)#{0: ‘tench, Tinca tinca’, 1: ‘goldfish, Carassius auratus’,

net.eval net.named_parameters()

  • eval()时,pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。
    不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大。eval()在非训练的时候是需要加的,没有这句代码,一些网络层的值会发生变动,不会固定
    *named_parameters(), 以迭代器的方式返回model中所有的参数,返回值是一个字典:包含参数的名称和数值大小;
    内部实现时使用了递归算法,所以对于嵌套的网络参数,会递归遍历,输出最底层的参数

.data.cpu().numpy().item()

  • 返回一个新的Tensor, 这个Tensor和原来的Tensor共享内存空间,一个改变,另一个也会随着改变
  • 将数据的处理设备从其他设备(如.cuda()拿到cpu上),不会改变变量类型,转换后仍然是Tensor变量
  • 将Tensor转化为ndarray,这里的Tensor可以是标量或者向量(与item()不同)转换前后的dtype不会改变
  • 将一个Tensor变量转换为python标量(int float等)常用于用于深度学习训练时,将loss值转换为标量并加,以及进行分类任务,计算准确值值时需要

numpy.squeeze()

  • 从数组的形状中删除单维度条目,即把shape中为1的维度去掉
weight_softmax = np.squeeze(params[-2].data.numpy())	# shape:(1000, 512)
#print(params[-2].data.numpy().shape) (1000, 512, 1, 1)
#print(weight_softmax.shape) (1000, 512)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值