痤疮分级实验笔记-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.hqwc.cn/news/211409.html

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

相关文章

Python web自动化测试 —— 文件上传

​文件上传三种方式: (一)查看元素标签,如果是input,则可以参照文本框输入的形式进行文件上传 方法:和用户输入是一样的,使用send_keys 步骤:1、找到定位元素,2&#…

“老人护工-预约上门” 技术支持网址

我们是一家为新加坡华人提供老人护工上门服务的软件。您可以选择满意的护工,然后提交联系人的信息,我们会在规定的时间安排护工人员上门,然后您线下支付所需的费用 如果您在使用过程中有什么问题,您可以随时联系我们。 邮箱地址&…

python数据结构与算法-17_二叉查找树

二叉查找树(BST) 二叉树的一种应用就是来实现堆,今天我们再看看用二叉查找树(Binary Search Tree, BST)。 前面有章节说到了查找操作,包括线性查找、二分查找、哈希查找等,线性查找效率比较低,二分又要求必须是有序的序列&#x…

利用GenericMenu创建上下文菜单或下拉菜单

使用GenericMenu 创建自定义上下文菜单和下拉菜单丰富自己的编辑器功能。 GenericMenu 介绍 变量 allowDuplicateNames 允许菜单具有多个同名的菜单项。 公共函数 AddDisabledItem 向菜单添加已禁用的项。 AddItem 向菜单添加一个项。 AddSeparator 向菜单添加一个分隔符项…

虚拟机解决Linux中Uos和Deepin登录密码忘记的问题 标题Linux Uos Deepin

Uos是切换网络模式解决的(之前有绑定过用户) 因为之前用的是桥接模式登录的时候一直无法联网,改为Nat模式后可以和电脑共用一个网络ip,可以重置密码了,以此解决 ps: 特别说明rw single init/bin/bash 方法和systemd.debug-shell1方法已经失效,不要再做无谓的尝试了Deepin23社区…

项目经理只需要有PMP证书就行?

就目前而言,大部分人对于项目经理的认识还停留在:有项目管理经验,有对应的工作年限,有PMP证书。所以绝大多数人都认为只要报考了PMP项目管理,取得PMP证书,即可加入项目经理的圈子,薪资翻倍。 但…

Flutter 父子组件通信

在Flutter 中父组件调用子组件的方法可以通过GlobalKey实现&#xff0c;而子组件调用父组件方法可以通过回调函数实现。 父组件 class _MyHomePageState extends State<MyHomePage> {final GlobalKey<LoadPencilState> loadPencilKey GlobalKey<LoadPencilSt…

Git工作流和Commit规范

Git大家都非常熟悉了&#xff0c;就不做过多介绍&#xff0c;但是如何用好Git、如何进行合理的分支开发、Merge你是否有一个规范流程呢&#xff1f;&#x1f4a4; 不论是一个团队一起开发一个项目&#xff0c;还是自己独立开发一个项目&#xff0c;都少不了要和Git打交道&…

DALSA.SaperaLT.SapClassBasic无法加载,试图加载格式不正确的程序,c#

情景&#xff1a;用c#wpf写DALSA线扫相机的项目&#xff0c;生成时不报错&#xff0c;运行到DALSA相关的代码就报错找不到dll&#xff08;DALSA的技术支持没给到任何支持 &#xff09; 一.根据框架选择dll 如果是.net framework框架&#xff08;比如说.net480&#xff09;&am…

Linux之实现简易的shell

1.打印提示符并获取命令行 我们在使用shell的时候&#xff0c;发现我们在输入命令是&#xff0c;前面会有&#xff1a;有用户名&#xff0c;版本&#xff0c;当前路径等信息&#xff0c;这里我们可以用环境变量去获取: 1 #include <stdio.h>2 #include <stdlib.h>…

【20年扬大真题】试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)

【20年扬大真题】 试写一算法在带头结点的单链表结构上实现线性表操作LENGTH&#xff08;L&#xff09;。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdbool.h> #include<malloc.h> //单链表定义 //链表结点 int A[10] { 1,2,3,4,5,6,…

Hadoop学习总结(MapReduce的数据去重)

现在假设有两个数据文件 file1.txtfile2.txt2018-3-1 a 2018-3-2 b 2018-3-3 c 2018-3-4 d 2018-3-5 a 2018-3-6 b 2018-3-7 c 2018-3-3 c2018-3-1 b 2018-3-2 a 2018-3-3 b 2018-3-4 d 2018-3-5 a 2018-3-6 c 2018-3-7 d 2018-3-3 c 上述文件 file1.txt 本身包含重复数据&…