构建网络遇到的问题-AlexNet

news/2024/9/29 23:47:40/

1.对模型进行初始化采用的一般代码

python">    def _initialize_weights(self):for m in self.modules():  # 遍历模型每一层if isinstance(m, nn.Conv2d):  # 判定m层是否属于nn.Conv2d类型nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')if m.bias is not None:nn.init.constant_(m.bias, 0)elif isinstance(m, nn.Linear):  # 判定m层是否属于nn.Linear类型nn.init.normal_(m.weight, 0, 0.01)  # normal distribution正态分布# nn.init.normal从正态分布中取值将weight填满,mean平均值,std方差nn.init.constant_(m.bias, 0)# 用val值将m.bias填满

2.os.getcwd() 获取当前的工作目录

若当前文件是train.py位于在D:\projects\AlexNet\train.py

os.getcwd()返回D:\projects\AlexNet

3.assert语句

用一种更方便的方式将debug语句插入到程序中,等价于

if __debug__:
   if not expression:

        raise AssertionError

assert os.path.exists(image_path), "{} path does not exist.".format(image_path)

此句的意思就是如果image_path这条路径不存在则输出不存在

4.torchvision.datasets.ImageFolder()

常设置的两个参数:

root=文件所在位置

transform=数据要进行的操作

该函数要求:

1)每个类别需要单独成立一个文件夹
2)每个类别里面的图片需要按顺序排列(无论使用英语还是数字)

该函数生成对象有三个属性

classes:即目录下文件夹(类别)的个数

classes_to_idx:即目录下文件夹(类别)的对应的id,从0开始

imgs:整个大文件目录下的所有图片及对应类别

例如:

train_dataset = datasets.ImageFolder(root=os.path.join(image_path, "train"),transform=data_transform["train"])

实质上train_dataset里面的内容是由所有图片进行排列的,每一行都由(img,类别号)组成

输出第一张图片的类别号

注:此次训练Alexnet的训练数据集是没有标签的,但是每个类别的图片位于对应类别的的文件夹下,使用ImageFolder的用处一是将各类别文件夹下的图片汇聚,二是为各图片打上类别标签,还可以利用ImageFolder对象的class_to_idx属性回去类别和其对应编号

5.python与json的转换

(1)将python对象转化为json文件

json_str = json.dumps(cla_dict, indent=4)

写一个json文件

with open('class_indices.json', 'w') as json_file:json_file.write(json_str)

(2)读取一个json文件,并将json对象转化为python对象

with open("class_indices.json","r") as f:class_id = json.load(f)

6.程序运行进度条

train_bar = tqdm(train_loader, file=sys.stdout)

7.在模型训练完后,用图片去让模型进行分类,要注意模型使用的图片大小,输入的图像一般要是4维的。

8.模型最后输出一般是一个二维数组,(图片个数,类别个数)

在使用torch.softmax时要注意维度,dim=1代表对每行进行softmax

torch.argmax同理


http://www.ppmy.cn/news/1532152.html

相关文章

专深与广博的平衡艺术

一、引言 ----  随着人工智能(AI)和生成式人工智能(AIGC)如ChatGPT、Midjourney、Claude等大语言模型的快速发展,AI辅助编程工具正逐渐成为程序员日常工作的得力助手。这一变革不仅对编程工作方式产生了深远影响&…

在云渲染中3D工程文件安全性怎么样?

在云渲染中,3D工程文件的安全性是用户最关心的问题之一。随着企业对数据保护意识的增强,云渲染平台采取了严格的安全措施和加密技术,以确保用户数据的安全性和隐私性。 云渲染平台为了保障用户数据的安全,采取了多层次的安全措施。…

Redis系列补充:聊聊布隆过滤器(go语言实践篇)

1 介绍 布隆过滤器(Bloom Filter)是 Redis 4.0 版本之后提供的新功能,我们一般将它当做插件加载到 Redis Service服务器中,给 Redis 提供强大的滤重功能。 它是一种概率性数据结构,可用于判断一个元素是否存在于一个集…

【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常

起因:今天编写一个请求时需要通过RestTemplate调用外部接口,获取一些信息,但是在获取了外部接口响应内容后,使用强制转换发现报了类型转换异常。之前也遇到过,但是没记录下来,今天又查了一遍……干脆记录一…

Tomcat中间件常见漏洞复现

#1.CVE-2017-12615 -----Tomcat put方法任意文件写入漏洞 1.打开靶场 cd vulhub/tomcat/CVE-2017-12615 docker-compose up -d docker ps 2.访问8080端口,来到靶场 3.首页进抓包,Tomcat允许适⽤put⽅法上传任意⽂件类型,但不允许jsp后缀…

@overload实际并无作用

overload 装饰器在 Python 中确实有些特殊。 虽然它看起来像是实现了函数重载,但实际上并没有真正改变函数的行为。 overload 主要用于类型提示和提高代码的可读性。 在 Python 中,函数重载(即根据参数类型或数量调用不同的函数实现&#xf…

一种单目标A*算法设计与实现

一种单目标A*算法设计与实现 作者:吴屏珊 最近在学习简单的单目标A*算法,其中在CSDN上阅读到的一篇博文给了我很大启发,于是在该博文的基础上,笔者记录了一点自己对于A*算法的体会和感悟。原文链接 目录 文章目录 一种单目标A*…

[Web安全 网络安全]-SSRF服务端请求伪造

文章目录: 一:前言 1.定义 2.原理 3.危害 4.产生的原因 5.用途 6.漏洞出现位置 7.防御方法 8.CSRF 和 XSS 和 XXE 和SSRF的么区别 9.相关危险函数 file_get_contents()函数 fsockopen()函数 curl_exec()函数 SoapClient()类 10.环境 10.…