8.1 配置环境/Linux进程管理总结/Argument/saveload Module/切片

文章目录

      • 一、配置环境
      • 二、Linux 进程管理总结
      • 三、ArgumentParser
      • 四、Saving and Loading Models nn.Modules
      • Warmstarting Model Using Parameters from a Different Model
      • 五、切片!
      • 拓展:

一、配置环境

github配置环境可以直接赋值到txt中,然后使用 pip install -r requ.txt
不过需要注意的是,如果你原来已经下载了的版本,他会直接覆盖掉,先uninstall再install

二、Linux 进程管理总结

当使用Ctrl+Z键盘快捷键暂停了一个进程后,该进程会被挂起(暂停),并且被移动到后台执行。

jobs命令: 使用jobs命令可以查看当前终端中的所有作业(包括后台和前台作业)。在终端中输入jobs,输出将显示当前所有作业的状态,其中包括被暂停的进程的编号(job number)和状态。
%N命令: 使用%N命令可以将某个后台作业切换到前台运行,其中N是被暂停进程的编号。

在按下Ctrl+Z之后,进程将不会继续在前台执行,而是暂停在后台。换句话说,进程的执行会被中止,直到您采取下面的操作。
1、fg(foreground)当您在终端使用fg命令时,它会将一个后台作业切换到前台执行,使该作业占用终端输入和输出,并让您可以与该作业进行交互。
2、bg(background)当您在终端使用bg命令时,它会将一个前台暂停的作业切换到后台执行,让该作业在后台默默地运行,不占用终端输入和输出。
但是就算使用bg他还是会输出到终端上来,可能是因为你没有使用输出重定向。原因:
如果在后台执行的进程仍然占用您的终端输入和输出,可能是因为该进程在后台运行时仍然输出大量的信息到终端,导致终端被占用。在后台执行的进程如果产生大量输出,会在终端上显示这些输出,导致终端无法正常响应其他输入。
有几种方法可以解决这个问题:

  • 如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:command > /dev/null & 这样是直接丢弃 命令后面加&是指在后台运行
  • 还可以重定向到txt文件 command > process1.txt &
  • 使用终端多路复用器,Terminal Multiplexer,如tmux或screen,可以让您在终端上创建多个会话,并在后台保持进程运行,同时在需要时可以切换到对应会话查看输出。screen reference Reference2
    BTW,>>是在后面追加

三、ArgumentParser

标志参数是一种命令行参数类型,通常用于在命令行中表示一个布尔值,即真(True)或假(False)。
标志参数不需要附加参数值,而只需在命令行中指定参数名即可

parser.add_argument('--verbose', action='store_true', help='Flag to enable verbose mode')

如果设置为选项参数(Optional Arguments):

parser.add_argument('--finetune', type=str, default="hahaha")

一旦你在命令里写了--finetune你后面就必须有参数,要不然会报如下错误:

error: argument --finetune: expected one argument

四、Saving and Loading Models nn.Modules

Fine-tuning(微调)是指在预训练好的模型基础上,通过继续训练(fine-tune)来适应特定的任务或数据集。通常情况下,预训练的模型在大规模的数据集上进行了较长时间的训练,学习到了丰富的特征表示。微调的目的是在这些预训练的特征表示的基础上,针对特定任务或数据集进行调整,以便更好地适应新的任务
Fine-tuning说白了:
1.load保存好的模型 --> 你需要知道model.save到底保存的是什么,以及model.load到底下载的什么
2.训练几个epoch
学习官方写法:you can save any other items that may aid you in resuming training by simply appending them to the dictionary.

torch.save({'epoch': epoch,'model_state_dict': model.state_dict(),'optimizer_state_dict': optimizer.state_dict(),'best_acc': best_acc'loss': loss,...}, PATH)

If you have more than one model, you can also store them in the form of dictionary. for instance:

torch.save({'modelA_state_dict': modelA.state.dict(),'modelB_state_dict': modelB.state.dict(),}, PATH)

以后加载模型就按照这个模板写:

# 先定义好model和optimizer
model = TheModelClass(*args, **kwargs)
optimizer = TheOptimizerClass(*args, **kwargs)
# 先用checkpoint下载下来
checkpoint = torch.load(PATH)
# 再load_state_dict
model.load_state_dict(checkpoint['model_state_dict'])
optimizer.load_state_dict(checkpoint['optimizer_state_dict'])
epoch = checkpoint['epoch']
loss = checkpoint['loss']model.eval()
# - or -
model.train()

记住,在运行推理之前,必须调用 model.eval() 将滤除层和批量归一化层设置为评估模式。如果不这样做,推理结果将不一致。
如果希望恢复训练,请调用 model.train() 以确保这些层处于训练模式。

Warmstarting Model Using Parameters from a Different Model

modelB.load_state_dict(torch.load(PATH), strict=False)
Partially loading a model or loading a partial model are common scenarios when transfer learning or training a new complex model. Leveraging trained parameters, even if only a few are usable, will help to warmstart the training process and hopefully help your model converge much faster than training from scratch.
Whether you are loading from a partial state_dict, which is missing some keys, or loading a state_dict with more keys than the model that you are loading into, you can set the strict argument to False in the load_state_dict() function to ignore non-matching keys.
即,当遇到不匹配的情况,如:
在这里插入图片描述

  1. 设置strict=False你可以直接忽略不匹配的键值,也就是说只传递匹配的键值。
  2. You can simply change the name of the parameter keys in the state_dict that you are loading to match the keys in the model that you are loading into.

e.g. new_state_dict = {k.replace('module.', ''): v for k, v in model_state_dict.items()}

五、切片!

定义: s e q u e n c e [ s t a r t : s t o p : s t e p ] sequence[start:stop:step] sequence[start:stop:step]
sequence不可以是dict,因为dict是无序的。
几种常见的用法:
a = [0,1,2,3,4,5,6,7]

  • a[::2]即隔一个选一个,结果为 0,2,4,6
    a[1::2] 1,3,5,7
  • a[::-1] 7,6,5,4,3,2,1,0
  • a[::-2]7,5,3,1
numbers = torch.arange(1, 10) # [1,2,3....9]
evens = numbers[1::2] # [2,4,...8]

numbers里面的1是指从索引为1的开始

拓展:

PyTorch allows a tensor to be a View of an existing tensor.
View tensor shares the same underlying data with its base tensor.这么做可以节约开销。

t = torch.rand(4, 4)
b = t.view(2, 8)
t.storage().data_ptr() == b.storage().data_ptr() -> True
b[0][0] = 3.14
t[0][0] -> 3.14

t是一个4x4的随机张量,b是通过对T进行view操作得到的2x8的张量,t和b共享相同的底层数据。因此,对b的修改也会反映在t上。
我们日常中用的一些函数很多都是view模式,比如:
Basic slicing and indexing op, e.g. tensor[0, 2:, 1:7:2] returns a view of base tensor
tensor_split(),T,transpose(),unsqueeze(),squeeze(),detach() etc.

所以在save tensor的时候, it saves their storage objects and tensor metadata separately.
例子如下:

large = torch.arange(1, 1000)
small = large[0:5]
torch.save(small, 'small.pt')
loaded_small = torch.load('small.pt')
loaded_small.storage().size() -> 999

当然你可以改成:torch.save(small.clone(), 'small.pt)
这样就只保存五个了

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

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

相关文章

【小沐学前端】VuePress制作在线电子书、技术文档(VuePress + Markdown + node)

文章目录 1、简介1.1 VuePress简介1.2 它是如何工作的? 2、安装node3、安装VuePress4、配置VuePress4.1 修改标题4.2 修改导航条4.3 修改右侧栏4.4 修改正文 结语 1、简介 Vue驱动的静态网站生成器,生成的网页内容放到自己服务器上管理,可用于…

HTML+CSS+JavaScript:渲染电商站购物车页面

一、需求 根据下图渲染购物车页面 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatib…

【总结】p50蓝图概念、面向对象思想、函数事件宏的区别

p50蓝图概念、面向对象思想、函数事件宏的区别 函数的概念&#xff08;纯虚函数和函数&#xff09;宏的概念函数、事件、宏的区别变量的概念面向对象思想&#xff08;封装、继承、多态&#xff09;类和对象的关系Object、actor、pawn、Character、component之间的区别控制权、玩…

振弦传感器信号转换器应用山体滑坡安全监测

振弦传感器信号转换器应用山体滑坡安全监测 随着人类文明的进步&#xff0c;自然灾害对人们的生活和财产安全造成的威胁也越来越大。山体滑坡作为自然灾害中的一种&#xff0c;给人们的生活和财产安全带来了极大的威胁。因此&#xff0c;进行山体滑坡的安全监测显得尤为重要。振…

uniapp 持续获取定位(登录状态下才获取)(不采用定时器)(任意页面都可监听定位改变)

基于上次文章做了优化和改良,保证在登录状态下才获取定位信息 uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)_uniapp小程序定位_前端小胡兔的博客-CSDN博客本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定…

补充JDK源码-IDEA集成工具

在阅读JDK8源码的时候发现&#xff0c;只有一小部分常用包是存在源码及其注释的&#xff0c;而很多内部包是没有源码&#xff0c;class文件在阅读的时候对阅读者十分不友好。在网上搜集了很多资料都没有解决问题。 解决问题办法&#xff1a;参考文档。本文主要是根据这篇文章记…

笔记本WIFI连接无网络【实测有效解决方案,不用重启电脑】

笔记本Wifi连接无网络实测有效解决方案 问题描述&#xff1a; 笔记本买来一段时间后&#xff0c;WIFI网络连接开机一段时间还正常连接&#xff0c;但是过一段时间显示网络连接不上解决方案&#xff1a; 1.编写网络重启bat脚本&#xff0c;将以下内容写到文本文件&#xff0c;把…

Dockerfile构建lamp镜像

1、构建目录 [rootdocker ~]# mkdir compose_lamp [rootdocker ~]# cd compose_lamp/ 2、编写Docekerfile [rootdocker compose_lamp]# vim Dockerfile #基础镜像 FROM centos:7#维护该镜像的用户信息 MAINTAINER Crushlinux <crushlinux163.com>#安装httpd RUN yum -…

【小沐学前端】GitBook制作在线电子书、技术文档(gitbook + Markdown + node)

文章目录 1、简介1.1 工具简介1.2 使用费用 2、安装2.1 安装node2.2 安装gitbook 3、测试3.1 编辑文档3.2 编译工程3.3 预览工程 结语 1、简介 官网地址&#xff1a; https://www.gitbook.com/1.1 工具简介 什么是 GitBook&#xff1f; GitBook 是一个现代文档平台&#xff…

Vue电商项目--导航守卫

导航守卫理解 导航 守卫 导航&#xff1a;表示路由正在发送改变&#xff0c;进行路由跳转 守卫&#xff1a;你把它当中‘紫禁城守卫’ 全局守卫&#xff1a;你项目中&#xff0c;只要路由变化&#xff0c;守卫就能监听到。 举例&#xff1a;紫禁城【皇帝&#xff0c;太子】…

【ONE·Linux || 基础IO(一)】

总言 文件输入与输出相关介绍&#xff1a;语言层面/系统层面文件调用接口举例、文件描述符、重定向说明、缓冲区理解。 文章目录 总言1、文件输入与输出1.1、预备知识1.2、语言层面&#xff1a;回归C语言中文件相关接口1.2.1、打开文件和关闭文件&#xff1a;对当前路径的理解…

了解Linux 的 mmap --- 笔记

学习这篇博客&#xff0c;进行了一些归纳Linux下mmap_linux mmap_一个山里的少年的博客-CSDN博客https://blog.csdn.net/qq_56999918/article/details/127070280 >>读取文件 读取文件方法&#xff1a;由操作系统提供的两个方法&#xff0c;read和write来读写文件。 由…