痤疮分级实验笔记-ResNet

组织数据集

方式1:根据txt文件分类的数据集组织形式(放弃)

你可以使用Python来读取txt文件中的训练集图片信息,并将这些图片从原始文件夹复制到目标文件夹中。

当程序无法找到标签对应的图片或者目标文件夹中已经存在同名图片时,你可以使用异常处理来跳过这些情况并继续复制粘贴其他满足要求的图片。以下是经过优化的代码示例:

import os
import shutil# 定义原始文件夹和目标文件夹的路径
original_dir = '原始文件夹路径'
target_dir = '目标文件夹路径'# 定义包含训练集图片信息的txt文件路径
txt_file = '训练集图片信息的txt文件路径'# 读取txt文件
with open(txt_file, 'r') as f:lines = f.readlines()# 遍历每一行图片信息
for line in lines:# 去除换行符line = line.strip()# 根据空格分割图片名称和其他文字内容image_name, _ = line.split(' ', 1)# 构建图片的完整路径image_path = os.path.join(original_dir, image_name)# 检查图片是否存在于原始文件夹中if not os.path.exists(image_path):print(f"图片 {image_name} 不存在于原始文件夹中,跳过该图片")continue# 构建目标文件夹中图片的完整路径target_image_path = os.path.join(target_dir, image_name)# 检查目标文件夹中是否已经存在同名图片if os.path.exists(target_image_path):print(f"目标文件夹中已存在同名图片 {image_name},跳过该图片")continue# 复制图片到目标文件夹shutil.copy(image_path, target_dir)

方式2:文件名作为分类标签

分类1-8:当前文件夹有一个放有很多图片的文件夹和一个其对应的标签txt文件(txt文件中的每一行是图片文件夹中的文件名+一个空格+该图片对应的类:1到8)。在当前文件夹下建立名为“1”到“8”的八个文件夹。请写一个python文件,在当前文件夹下根据txt文件中的每一行的信息以及将图片文件夹里的图片分类,分别放入新建立的八类文件夹下:

import os
import shutil# 图片文件夹路径
image_folder = './train_image'# 标签文件路径
label_file = './train.txt'# 创建八个类别文件夹
for i in range(1, 9):folder_path = str(i)os.makedirs(folder_path, exist_ok=True)# 读取标签文件
with open(label_file, 'r',encoding='utf-8') as file:lines = file.readlines()# 遍历每一行,将图片分类到对应的文件夹
for line in lines:line = line.strip()filename, label = line.split(' ')src_path = os.path.join(image_folder, filename)dst_path = os.path.join(label, filename)shutil.move(src_path, dst_path)print('分类完成!')

模型加载与保存(参数)

本次实验保存成功的方式:

加载预训练模型

 net = resnet34()# load pretrain weights# download url: https://download.pytorch.org/models/resnet34-333f7ec4.pthmodel_weight_path = "./resnet34-pre.pth"assert os.path.exists(model_weight_path), "file {} does not exist.".format(model_weight_path)net.load_state_dict(torch.load(model_weight_path, map_location='cpu'))

模型保存

训练前:

save_path = './resNet34.pth'

训练时: 

        if val_accurate > best_acc:best_acc = val_accuratetorch.save(net.state_dict(), save_path)

加载训练好的模型

    # create modelmodel = resnet34(num_classes=8).to(device)# load model weightsweights_path = "./resNet34.pth"assert os.path.exists(weights_path), "file: '{}' dose not exist.".format(weights_path)model.load_state_dict(torch.load(weights_path, map_location=device))

模型训练

深度学习模型训练时,model.train()个别模型可调用,是什么意思?

在深度学习模型训练过程中,调用 model.train() 是为了将模型设置为训练模式。这个方法主要用于区分模型在训练和评估(推理)阶段的行为。

当调用 model.train() 时,模型的行为会发生变化,具体包括:

  1. Batch Normalization 和 Dropout 层会处于训练模式:Batch Normalization 层在训练和推理阶段有不同的行为,训练时会计算每个批次的均值和方差,并使用批次统计信息进行标准化。Dropout 层在训练时会随机丢弃一部分神经元,以减少过拟合。

  2. 梯度计算和参数更新:在训练模式下,模型会计算损失函数关于参数的梯度,并使用优化算法(如随机梯度下降)更新模型的参数,以最小化损失函数。

相反,当调用 model.eval() 时,模型会被设置为评估模式。在评估模式下,模型的行为会发生以下变化:

  1. Batch Normalization 和 Dropout 层会处于评估模式:Batch Normalization 层使用保存的移动平均值和方差进行标准化,而不是使用当前批次的统计信息。Dropout 层在评估时不会丢弃神经元,以保留所有的特征。

  2. 梯度计算和参数更新被禁用:在评估模式下,模型不会计算梯度,也不会更新参数。这是因为在评估阶段我们只关心模型的预测结果,而不需要进行反向传播和参数更新。

总结起来,调用 model.train() 将模型设置为训练模式,启用了一些训练特定的行为,如 Batch Normalization 和 Dropout 的训练行为以及参数更新。而调用 model.eval() 将模型设置为评估模式,禁用了一些训练特定的行为,以保证在评估阶段的一致性和稳定性

终端命令

Linux命令

autodl使用的Linux系统

ls

 -l:以列表的方式去显示
 -a:显示隐藏文件
 -h: 显示文件大小的单位
 -al:显示隐藏文件并且以列表方式显示
 -lh:以列表的方式去显示并且显示文件的大小

tree:以目录树方式显示当前文件夹信息

tree /:以目录树方式显示指定路径的文件信息

cd:切换目录

 cd 目录名:切换到指定目录
 cd .:切换到当前目录
 cd …:切换到上一级目录

绝对目录:从根目录算起的路径叫做绝对路径,比如:/home/python
自动补全:两次tab键
pwd:相看目录所在的路径

Window命令

DIR [目录名或文件名]


参数:
/s 查找子目录
/w 只显示文件名
/p 分页
/a 显示隐藏文件

python命令

os.getcwd() 返回当前进程的工作目录,并非当前文件所在的目录
python使用seedir查看文件目录结构
import seedir as sd
path = './Test5_resnet'
sd.seedir(path, style='lines',itemlimit=10,depthlimit=2,exclude_folders='.git')

一些Bug

pycharm中ctrl+左键进入不了源码

python解释器可以进入源码,Anoconda解释器点击无效

Found no valid file for the classes .ipynb_checkpoints。

遇到这个问题只需要删除掉隐藏文件.ipynb_checkpoints即可,步骤如下
1.先通过 cd 到主目录下
在这里插入图片描述
2.通过ls -a列出目录下所有文件
在这里插入图片描述
3.通过rm -rf .ipynb_checkpoints删除掉该隐藏文件,再通过ls -a检查
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言编译过程再解析

多年以前,分析过编译过程,并写了一篇博客,现在对编译过程有了更广阔的认识,记录在此 编译过程 中的 链接与 编译 编译过程分为1. 预处理2. 编译3. 汇编4. 链接其中有 2个过程比较特殊,1. 编译2. 链接对于C程序来说,链接分为提前链接(静态链接)对应下图第1行运行时链接(动态链…

QGIS安装及简单使用

QGIS(Quantum GIS)是一个自由、开源的跨平台桌面地理信息系统(GIS)应用程序,它允许用户创建、编辑、查看、分析和发布地理空间数据和地图。 操作系统:Windows 10 QGIS版本:QGIS Desktop 3.28.…

【二叉树】oj题

在处理oj题之前我们需要先处理一下之前遗留的问题 在二叉树中寻找为x的节点 BTNode* BinaryTreeFind(BTNode* root, int x) {if (root NULL)return NULL;if (root->data x)return root;BTNode* ret1 BinaryTreeFind(root->left, x);BTNode* ret2 BinaryTreeFind(ro…

【华为OD】B\C卷真题:100%通过:找城市 C/C++实现

【华为OD】B\C卷真题:100%通过:找城市 C/C实现 题目描述: 一张地图上有n个城市,城市和城市之间有且只有一条道路相连:要么直接相连,要么通过其它城市中转相连(可中转一次或多次)。…

【计算机网络学习之路】日志和守护进程

文章目录 前言一. 日志介绍二. 简单日志1. 左字符串2. 右字符串 三. 守护进程1. ps -axj命令2. 会话扩展命令 3. 创建守护进程 结束语 前言 本系列文章是计算机网络学习的笔记,欢迎大佬们阅读,纠错,分享相关知识。希望可以与你共同进步。 本…

canvas扩展001:利用fabric绘制图形,可以平移,旋转,放缩

canvas实例应用100 专栏提供canvas的基础知识,高级动画,相关应用扩展等信息。 canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重要的帮助。 文章目录 示例…

串口通信基础知识介绍

一、串行通讯与并行通讯 在通信和计算机科学中,串行通信(Serial Communication)是一个通用概念,泛指所有的串行的通信协议,如RS232、RS422、RS485、USB、I2C、SPI等。 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种…

JAVA时间常用操作工具类

小刘整理了JAVA中对时间的常用操作,封装了几种方法,简单方便,开箱即用。时间转字符串格式,字符串转时间,以及过去和未来的日期。除此之外,还新增了时间戳之差计算时分秒天的具体方案。 public static void …

如何使用nginx部署静态资源

Nginx可以作为静态web服务器来部署静态资源,这个静态资源是指在服务端真实存在,并且能够直接展示的一些文件数据,比如常见的静态资源有html页面、css文件、js文件、图片、视频、音频等资源相对于Tomcat服务器来说,Nginx处理静态资…

DGL在异构图上的GraphConv模块

回顾同构图GraphConv模块 首先回顾一下同构图中实现GraphConv的主要思路(以GraphSAGE为例): 在初始化模块首先是获取源节点和目标节点的输入维度,同时获取输出的特征维度。根据SAGE论文提出的三种聚合操作,需要获取所…

蓝桥杯第四场双周赛(1~6)

1、水题 2、模拟题,写个函数即可 #define pb push_back #define x first #define y second #define int long long #define endl \n const LL maxn 4e057; const LL N 5e0510; const LL mod 1e097; const int inf 0x3f3f; const LL llinf 5e18;typedef pair…

vue3+ts 兄弟组件之间传值

父级&#xff1a; <template><div><!-- <A on-click"getFlag"></A><B :flag"Flag"></B> --><A></A><B></B></div> </template><script setup lang"ts"> i…

01、copilot+pycharm

之——free for student 目录 之——free for student 杂谈 正文 1.for student 2.pycharm 3.使用 杂谈 copilot是github推出的AI程序员&#xff0c;将chatgpt搬到了私人终端且无token限制&#xff0c;下面是使用方法。 GitHub Copilot 是由 GitHub 与 OpenAI 合作开发的…

2023年3月电子学会青少年软件编程 Python编程等级考试一级真题解析(判断题)

2023年3月Python编程等级考试一级真题解析 判断题(共10题,每题2分,共20分) 26、在Python编程中,print的功能是将print()小括号的内容输出到控制台,比如:在Python Shell中输入print(北京,你好)指令,小括号内容可以输出到控制台 答案:错 考点分析:考查python中print…

【【Linux编程介绍之关键配置和常用用法】】

Linux编程介绍之关键配置和常用用法 Hello World ! 我们所说的编写代码包括两部分&#xff1a;代码编写和编译&#xff0c;在Windows下可以使用Visual Studio来完成这两部&#xff0c;可以在 Visual Studio 下编写代码然后直接点击编译就可以了。但是在 Linux 下这两部分是分开…

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书

2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷任务书 2024年第十六届山东省职业院校技能大赛中职组 “网络安全”赛项竞赛正式卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A-1&#xff1a;登录安全加固&#xff08;Windows, Linux&am…

【Mybatis】预编译/即时sql 数据库连接池

回顾 Mybatis是一个持久层框架.有两种方式(这两种方式可以共存) 1.注解 2.xml 一.传递参数 以使用#{} 来接受参数为例 (以上两种方式一样适用的) 1)传递单个参数 #{} 可以为任意名称 2)多个参数 默认的参数名称就是接口方法声明的形参 3)参数为对象 默认给每个对象的每个属性都…

Linux内核中的overlay文件系统

一、简介 Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs&#xff0c;今天我们来说一下UnionFs。 linux UnionFs 实现的是overlay 文件系统 OverlayFs 文件系统分为三层&#xff0c; lower 是只读层 Upper 是可读写 Merged 是 lower 和U…

OD机考真题搜集:叠积木1

题目 有一堆长方体积木,它们的高度和宽度都相同,但长度不一。 小橙想把这堆积木叠成一面墙,墙的每层可以放一个积木,或将两个积木拼接起来,要求每层的长度相同。若必须用完这些积木,叠成的墙最多为多少层?如下是叠成的一面墙的图示,积木仅按宽和高所在的面进行拼接。 …

【数据结构】树与二叉树(廿六):树删除指定结点及其子树(算法DS)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲3. 搜索指定数据域的结点4. 删除结点及其左右子树a. 逻辑删除与物理删除b. 算法DSTc. 算法解析d. 代码实现递归释放树算法DS e. 算法测试 5. 代码整合…