痤疮分级实验笔记-ResNet

news2024/9/29 9:26:56

组织数据集

方式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.pth
 model_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_accurate
            torch.save(net.state_dict(), save_path)

加载训练好的模型

    # create model
    model = resnet34(num_classes=8).to(device)

    # load model weights
    weights_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.coloradmin.cn/o/1242540.html

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

相关文章

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持,尽管他们多次尝试排除故障,但由于缺乏专业知识,最终还是无法访问工作所需的应用程序。这时,他们需要一名专业的 IT 技术人员来指导他们,但他们只能等待有人注意到并回应他们的…

BMS基础知识:BMS基本功能,铅酸和锂电池工作原理,电池系统的重要概念!

笔者有话说: 作为BMS从业者来讲,目前接触的BMS系统并不是很高大尚,但基础功能都是有的。 关于BMS的基本功能,工作原理,运行逻辑等,在此做一个梳理,讲一些最基础的扫盲知识,可以作为…

安全牛《数据分类分级自动化建设指南》发布|美创入选代表厂商,分享智能化探索

近日,安全牛发布《数据分类分级自动化建设指南》研究报告,对数据分类分级的主要技术、实施要点、选型指导、发展趋势等展开深入探讨,为各行业数据分类分级自动化工作落地提供帮助与指引。 美创科技被列为代表推荐厂商,落地案例—农…

Flutter:引领移动开发新潮流,跨平台应用程序的终极解决方案

文章目录 一、介绍二、环境搭建三、基础组件四、生命周期管理五、路由控制六、网络请求七、数据存储八、调试与优化《从零基础到精通Flutter开发》特色内容简介作者简介目录获取方式 一、介绍 Flutter是由Google开发的一款开源移动应用开发框架,它可以帮助开发者快…

PS给图片增加一个白色边框。

问题描述:PS如何给图片增加一个白色边框? 解决办法: 第一步:使用shiftAltA快捷键,在图片四周拉出一个灰白色的边框。如下图所示: 第二步,使用快捷键Ctrlshiftn新建一个图层。 并把新建的图层…

C语言——利用函数递归,编写函数不允许创建临时变量,求字符串长度

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int my_strlen(char* str) {if(*str ! \0)return 1my_strlen(str1);elsereturn 0; }int main() {char arr[] "hello";int len my_strlen(arr); //arr是数组&#xff0c;数组传参&#xff0c;传过去的是第…

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

2.4G射频收发芯片 XL2407P芯片介绍,集成九齐单片机

XL2407P芯片是工作在2.400~2.483GHz世界通用ISM频段,集成微控制器的的SOC无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一-对多组网和带ACK的通信模式。发射输出功率、工作频道以及通信数据率均可配置。 芯片内含以EPROM作为内…

HTML5+ API 爬坑记录

背景: 有个比较早些使用5开发的项目, 最近两天反馈了一些问题, 解决过程在此记录; 坑1: plus.gallery.pick 选择图片没有进入回调 HTML5 API Reference 在 联想小新 平板电脑上选择相册图片进行上传时, 打开相册瞬间 应用会自动重启, 相册倒是有打开, 不过应用重启了, 导…

Ajax技

Ajax的特点 异步提交&#xff1a;Ajax采用异步通信方式&#xff0c;能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据&#xff0c;提升了用户体验。无需插件&#xff1a;Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的&#xff0c;无需安装插件或…

HBase之Slow log

目录 Slow log记录条件日志示例配置内存存储配置表存储 Slow log hbase会记录慢查询日志&#xff0c;关键字包括responseTooSlow、responseTooLarge、operationTooSlow、and operationTooLarge。 记录条件 响应时间和响应的数据大小可由以下参数配置 hbase.ipc.warn.respon…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

安卓手机便签APP用哪个,手机上好用的便签APP是什么

在日常生活及工作方面&#xff0c;总是有许多做不完的事情需要大家来处理&#xff0c;当多项任务堆叠交叉在一起时&#xff0c;很容易漏掉一些项目&#xff0c;这时候大家会借助经常携带的手机来记录容易忘记的事情&#xff0c;如手机上的闹钟、定时提醒软件都可以用来记录待办…

三、Keil安装芯片包、下载固件库、建立STM32工程模板

目录 一、首先在Keil软件上安装好芯片包 二、下载官方固件库 三、建立基于固件库的Keil5工程模板 一、首先在Keil软件上安装好芯片包 STM32有很多系列的芯片&#xff0c;我们平常用的最多的是STM32F1系列的&#xff0c;因此安装F1系列的芯片包在我们初学时&#xff0c;只按照…

分页符 分页

【插入】---【分页符】 目录和一级标题得新起一页

java--static的注意事项

1.使用类方法、实例方法时的几点注意事项 ①类方法中可以直接访问类的成员&#xff0c;不可以直接访问实例成员。 ②实例方法中既可以直接访问类成员&#xff0c;也可以直接访问实例成员。 ③实例方法中可以出现this关键字&#xff0c;类方法中不可以出现this关键字的。

Hook技术(钩子技术)

HOOK&#xff08;钩子技术&#xff09; 这里的hook我理解的意思就是通过拦截指令&#xff0c;将指令换成自己想要的指令&#xff0c;从而做道绕过原本的程序指令&#xff0c;要修改这个指令&#xff0c;要用汇编技术&#xff0c;从二进制入手。 扩展&#xff1a; 木马病毒之…

基于单片机的光伏发电并网系统设计(论文+源码)

1.系统设计 片作为主控制器。由于太阳能板本身的能量输出受到负载影响&#xff0c;因此需要在太阳能板后面加入一级DC/DC电路&#xff0c;来实现最大功率跟踪&#xff0c;以提高整个系统的效率。接着&#xff0c;由于光伏逆变器需要产生220V的交流电给居民使用&#xff0c;因此…

生命周期评估(LCA)与SimaPro碳足迹分析

SimaPro提供最新的科学方法和数据库以及丰富的数据&#xff0c;使您可以收集和评估产品和流程的环境绩效。通过这种方式&#xff0c;您可以将改变公司产品生命周期的想法提交给您的同事&#xff0c;以便阐明您的业务未来。 SimaPro软件的特点和功能&#xff1a; 完全控制产品生…