首页 > 其他分享 >选择最优模型

选择最优模型

时间:2022-09-30 10:02:37浏览次数:79  
标签:__ dim 模型 torch 选择 np 维度 最优 model

np.random.seed(使随机数~可预测)

随机种子seed括号里的数,顾名思义, 好像就是一个固定的序列集合的种子代号,例如代号0(如:0,1,2,3,4…),中包含一大串随机数,但都是固定的,所以,无论后面怎么random.random,生成的随机数都是seed(0)集合中的随机数。

import numpy as np
from icecream import ic

if __name__ == '__main__':
    np.random.seed(0)   # 随机种子代号自己设定
    x1 = np.random.random(3) 
    ic(x1)

第一次:
ic| x1: array([0.5488135 , 0.71518937, 0.60276338])

第二次:
ic| x1: array([0.5488135 , 0.71518937, 0.60276338])
np.loadtxt()读取文件

np.loadtxt(filepath,delimiter,usecols,unpack)

参数:
filepath:加载文件路径
delimiter:加载文件分隔符
usecols:加载数据文件中列索引
unpack:当加载多列数据时是否需要将数据列进行解耦赋值给不同的变量

np.random.shuffle()

对给定数组进行重新排序

#一维
import numpy as np

arr = np.arange(10)
print(arr)

np.random.shuffle(arr)
print(arr)
[0 1 2 3 4 5 6 7 8 9]
[3 7 4 0 9 5 6 1 8 2]
#多维
import numpy as np
arr = np.arange(12).reshape(3,4)
print(arr)

np.random.shuffle(arr)
print(arr)
print('==========')
np.random.shuffle(arr)
print(arr)

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
=======
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
==========
[[ 0  1  2  3]
 [ 8  9 10 11]
 [ 4  5  6  7]]
Dataloader()
  • 参数

    • dataset:提前定义的dataset的实例

      batch_size:传入数据的batch的大小,常用128,256等等

      shuffle:bool类型,表示是否在每次获取数据的时候提前打乱数据

      num_workers:加载数据的线程数

      drop_last=True表示当数据无法取整时,舍去最后一个批次。

class Dataset(object):
    """An abstract class representing a Dataset.

    All other datasets should subclass it. All subclasses should override
    ``__len__``, that provides the size of the dataset, and ``__getitem__``,
    supporting integer indexing in range from 0 to len(self) exclusive.
    """

    def __getitem__(self, index):
        raise NotImplementedError

    def __len__(self):
        raise NotImplementedError

    def __add__(self, other):
        return ConcatDataset([self, other])

  • __len__方法:实现通过全局的len()方法获取元素个数
  • __getitem__方法:能够通过传入索引的方式获取数据,例如: dataset[i]获取其中的第i条数据。
  • __add__ 方法:实现将两个数据集合并到一起。
zip()

函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

torch.manual_seed()

torch.manual_seed(seed) 功能描述

设置 CPU 生成随机数的 种子 ,方便下次复现实验结果。

为 CPU 设置 种子 用于生成随机数,以使得结果是确定的。

当你设置一个随机种子时,接下来的随机算法生成数根据当前的随机种子按照一定规律生成。
随机种子作用域是在设置时到下一次设置时。要想重复实验结果,设置同样随机种子即可。

Python argparse.ArgumentParser()用法解析
argparse是一个Python模块:命令行选项、参数和子命令解析器。作用和C语言中的命令行参数作用相同。
  argparse 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 argparse 将弄清如何从 sys.argv 解析出那些参数。 argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。
使用流程:
  引入模块–>创建解析器–>添加参数–>解析参数
  
  '''
ArgumentParser对象
prog - 程序的名称(默认: sys.argv[0],prog猜测是programma的缩写)
usage - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)
description - 在参数帮助文档之后显示的文本 (默认值:无)


add_argument()方法:
name or flags - 一个命名或者一个选项字符串的列表
action - 表示该选项要执行的操作
default - 当参数未在命令行中出现时使用的值
dest - 用来指定参数的位置
type - 为参数类型,例如int
choices - 用来选择输入参数的范围。例如choice = [1, 5, 10], 表示输入参数只能为1,5 或10
help - 用来描述这个选项的作用,给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。



'''
'''
把parser中设置的所有"add_argument"给返回到args子类实例当中, 那么parser中增加的属性内容都会在args实例中,使用即可。
'''

add_scalar和add_scalars函数

这两个函数是用来保存程序中的数据,然后利用tensorboard工具来进行可视化的。

查看日志

image-20220929012433381

model.eval()

model.eval()是保证BN层能够用全部训练数据的均值和方差,即测试过程中要保证BN层的均值和方差不变。对于Dropout,model.eval()是利用到了所有网络连接,即不进行随机舍弃神经元。

torch.load()
用来加载模型。
torch.load(f, map_location=None, pickle_module=<module 'pickle' from '...'>)

参数:
f      类文件对象(返回文件描述符)或一个保存文件名的字符串
map_location      一个函数或字典规定如何映射存储设备
pickle_module  用于 unpickling元数据和对象的模块(必须匹配序列化文件时的pickle_module)
#model.load_state_dict(torch.load(PATH))

表示将训练好的模型参数重新加载至网络模型中

torch.argmax(input, dim, keepdim=False) → LongTensor
函数返回其他所有维在这个维度上面张量最大值的索引。
torch.argmax()函数中dim表示该维度会消失,可以理解为最终结果该维度大小是1,表示将该维度压缩成维度大小为1。
举例理解:对于-个维度为(d0,d1)的矩阵来说,dim=1表示求每一 行中最大数的在该行中的列号,最后得到的就是一个维度为(d0,1) 的- C维矩阵,最终列这一维度大小为1就要消失了, 最终结果变成一维张量 (d0);
dim=0表示求每一列中 最大数的在该列中的行号,最后我们得到的就是一个维度为(1, d1) 的二维矩阵,结果行这维度大小为1就要消失了, 最终结果变成一维张量(d1)。
因此,我们想要求每一行最大的列标号,我们就要指定dim=1,表示我们不要列了,保留行的size就可以了。
假如我们想求每一列的最大行标, 就可以指定dim=0,表示我们不要行了,求出每一列的最大值的下标,最后得到(1,d1) 的一维矩阵。

输入二维张量torch.Size([3, 4]),dim=0表示将dim=0这个维度大小由3压缩成1,然后找到dim=0这三个值中最大值的索引,这个索引表示dim=0行索引标号,结果张量维度变为torch.Size([4])。

import torch
x = torch.randn(3,4)
y = torch.argmax(x,dim=0)#dim=0表示将dim=0这个维度大小由3压缩成1,然后找到dim=0这三个值中最大值的索引,这个索引表示dim=0行索引标号
x,x.shape,y,y.shape

输出结果如下:
(tensor([[ 2.6347,  0.6456, -1.0461, -1.5154],
         [-1.3955, -1.2618, -0.5886, -0.5947],
         [-1.5272, -2.0960,  0.9428, -0.9532]]),
 torch.Size([3, 4]),
 tensor([0, 0, 2, 1]),
 torch.Size([4]))

torch.argmax函数说明

argmax函数:torch.argmax(input, dim=None, keepdim=False)返回指定维度最大值的序号,dim给定的定义是:the demention to reduce.也就是把dim这个维度的,变成这个维度的最大值的index。
1)dim的不同值表示不同维度。特别的在dim=0表示二维中的列,dim=1在二维矩阵中表示行。广泛的来说,我们不管一个矩阵是几维的,比如一个矩阵维度如下(d0,..,.dn-1),那么dim=0就表示对应到d0也就是第一个维度,dim=1表示对应到
也就是第二个维度,一次类推。
2)知道dim的值是什么意思还不行,还要知道函数中这个dim给出来会发生什么。

# inference

import torch
from torch.utils.data import DataLoader
from dataset_banknote import BanknoteDataset
from model import BanknoteClassificationModel
from config import HP


# new model instance
model = BanknoteClassificationModel()
#torch.load() 加载模型 选择最优的模型
checkpoint = torch.load('./model_save/model_40_600.pth')
#model.load_state_dict(torch.load(PATH))表示将训练好的模型参数重新加载至网络模型中
model.load_state_dict(checkpoint['model_state_dict'])

# test set
# dev datalader(evaluation)
testset = BanknoteDataset(HP.testset_path)
test_loader = DataLoader(testset, batch_size=HP.batch_size, shuffle=True, drop_last=False)

model.eval()
 
total_cnt = 0 #记录模型有多少条数据
correct_cnt = 0 #记录有多少个正确的

with torch.no_grad():
    for batch in test_loader:
        x, y = batch
        pred = model(x)
        # print(pred)
        total_cnt += pred.size(0)
        #torch.argmax(input, dim) 函数返回其他所有维在这个 维度上面张量最大值的索引
        #  参数:dim=0,返回行号,dim=1 返回列号
        #判断pred有多少个与真实值y相同的
        correct_cnt += (torch.argmax(pred, 1) == y).sum()
#Acc准确率

print('Acc: %.3f' % (correct_cnt/total_cnt))

标签:__,dim,模型,torch,选择,np,维度,最优,model
From: https://www.cnblogs.com/aohongchang/p/16743898.html

相关文章

  • 《有个数学模型想咨询下吧友的意见》 回复
    《有个数学模型想咨询下吧友的意见》    https://tieba.baidu.com/p/8049516112      风消云散亦无悔:假设某游戏某种材料,记为材料A爆率是20%不是腾......
  • DOM文档对象模型
    目录​​DOM的概念​​​​HTMLDOM 的方法和属性​​​​代码举例​​DOM的概念DOM,全称DocumentObjectModel,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问......
  • DOM文档对象模型
    目录​​DOM的概念​​​​HTMLDOM 的方法和属性​​​​代码举例​​DOM的概念DOM,全称DocumentObjectModel,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问......
  • 运筹学 | 退化的最优解 vs 无穷多最优解?
    退化的最优解:单纯形表的基可行解中,出现等于零的基变量。或者,按最小比值来确定出基向量时,存在两个以上相同最小比值。出现的原因:模型中存在多余的约束。无穷多最优解......
  • SAP License:ERP软件选择应该注意什么?
    ​​ERP软件​​选择应该注意什么?企业在准备要实施一个ERP系统软件之前,往往遇到一些困惑,什么样的ERP系统系统才是真正适合本企业的发展。企业在考察供应商的时候无非从是否......
  • 企业为什么选择SDWAN代替MPLS?
    企业《夽易联》下的企业SDWAN仅基于单个WAN的办公室间连接(基于MPLS或VPN)不是动态的,因此无法对传输中的性能波动做出反应。新一代SD-WAN《夽易联》将基于BGP或OSPF......
  • 使用 TensorFlow 缩短模型部署
    使用TensorFlow缩短模型部署如何使用TensorFlow简化ML模型部署和服务Imagegeneratedby稳定扩散fromprompt“CoolmachinelearningandAIstuff”.ü通......
  • 分布式机器学习中的数据并行(Data Parallelism)和模型并行(model parallelism)
    分布式机器学习中的数据并行(DataParallelism)和模型并行(modelparallelism)前言:现在的模型越来越复杂,参数越来越多,其训练集也在剧增。在一个很大的数据集集中训练一......
  • 06.百度日历的选择另一种方法(快)
    Dim bRet, arrElement, iRet, temp, 年, i, 号 = "", 月 = "", 月份验证 = ""  年 = Dialog.InputBox("请输入年份", "年份", "", false)  年......
  • 你能想到的数据模型建模选项,这里都有
    现在是开始着手搭建数据模型的时候了。BW/4HANA提供的信息对象犹如智能建筑材料,这些建筑材料有很多配置选项,可以根据需求智能地进行变形。搭建的数据仓库模型也一样,BW/4HANA......