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.rhkb.cn/news/78056.html

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

相关文章

一 关于idea如何在svn进行项目下载并运行成功

安装svn客户端 如图 安装时请选择该选项(Will be installed on local hard drive)并选择自己想要安装的目录路径 如图 svn安装成功 如图 注意 安装完成后,使用svn进行一次checkout的项目导出完成以上五步时&…

Qt应用开发(基础篇)——滑块类 QSlider、QScrollBar、QDial

一、前言 滑块类QScrollBar、QSlider和QDial继承于QAbstractSlider,父类主要拥有最大值、最小值、步长、当前值、滑块坐标等信息,滑动的时候触发包含值数据变化、滑块按下、滑块释放等信号。键盘包括左/上和右/下箭头键通过定义的singleStep改变当前值&a…

程序框架-事件中心模块-观察者模式

一、观察者模式 1.1 观察者模式定义 意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变是,所有依赖于它的对象都能得到通知并自动更新。 适用性: 当一个对象状态的改变需要改变其他对象, 或实际对…

大模型使用——超算上部署LLAMA-2-70B-Chat

大模型使用——超算上部署LLAMA-2-70B-Chat 前言 1、本机为Inspiron 5005,为64位,所用操作系统为Windos 10。超算的操作系统为基于Centos的linux,GPU配置为A100,所使用开发环境为Anaconda。 2、本教程主要实现了在超算上部署LLAM…

CentOS 安装 Jenkins

本文目录 1. 安装 JDK2. 获取 Jenkins 安装包3. 将安装包上传到服务器4. 修改 Jenkins 配置5. 启动 Jenkins6. 打开浏览器访问7. 获取并输入 admin 账户密码8. 跳过插件安装9. 添加管理员账户 1. 安装 JDK Jenkins 需要依赖 JDK,所以先安装 JDK1.8。输入以下命令&a…

【RabbitMQ(day4)】SpringBoot整合RabbitMQ与MQ应用场景说明

一、SpringBoot 中使用 RabbitMQ 导入对应的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>配置配置文件 spring:application:name: rabbitmq-springbo…

【解放ipad生产力】如何在平板上使用免费IDE工具完成项目开发

我的博客即将同步至腾讯云开发者社区&#xff0c;邀请大家一同入驻&#xff1a;https://cloud.tencent.com/developer/support-plan?invite_code3o19zyy2pneoo 前言 很多人应该会像我一样吧&#xff0c;有时候身边没电脑突然要写项目&#xff0c;发现自己的平板没有一点作用&…

[openCV]基于赛道追踪的智能车巡线方案V1

import cv2 as cv import os import numpy as npimport time# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表""&quo…

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件

❤ npm不是内部或外部命令,也不是可运行的程序 或批处理文件 cmd或者终端用nvm 安装提示&#xff1a; npm不是内部或外部命令,也不是可运行的程序或批处理文件 原因&#xff08;一&#xff09; 提示这个问题&#xff0c;有可能是Node没有安装&#xff0c;也有可能是没有配置…

Docker卸载安装及国内镜像源(详细版)

文章目录 一、卸载已有Docker1、首先判断本地有没有docker&#xff1a;2、判断CentOS下 docker是否在运行&#xff1a;3、停止docker运行&查看状态4、yum查看docker安装的包并卸载5、删除docker安装目录6、查看docker version 二、Docker安装及镜像源配置1、centOS 7 yum源…

钉钉群消息推送

1. 添加钉钉群机器人 PC端登录&#xff08;当前版本手机端无法进行推送关键词设置&#xff09;&#xff0c;群设置--> 机器人 --> webhook进行安全设置复制webhook对应的url 2. 群消息推送 钉钉群消息支持纯文本和markdown类型 2.1 调用示例源码 import com.alibaba.…

设计模式之模板方法

一、概述 定义一个操作中的算法的骨架&#xff0c;将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 二、适用性 1.一次性实现一个算法的不变的部分&#xff0c;并将可变的行为留给子类来实现。 2.各子类中公共…

人机交互与人机混合智能的区别

人机交互和人机融合智能是两个相关但不完全相同的概念&#xff1a; 人机交互是指人与计算机之间的信息交流和互动过程。它关注的是如何设计和实现用户友好的界面&#xff0c;以便人们能够方便、高效地与计算机进行沟通和操作。人机交互通常强调用户体验和界面设计&#xff0c;旨…

6.7.tensorRT高级(1)-使用onnxruntime进行onnx模型推理过程

目录 前言1. python-ort2. C-ort总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-使用 onnxruntime 进行 on…

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

[ MySQL ] — 库和表的操作

目录 库的操作 创建数据库 语法&#xff1a; 使用&#xff1a; 字符集和校验规则 查看系统默认字符集以及校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 校验规则对数据库的影响 操纵数据库 查看数据库 显示创建语句 修改数据库 删除数据库 备…

【Linux】计算机网络套接字编写

文章目录 前言TCP协议和UDP协议网络字节序socket接口sockaddr结构1.创建套接字 cs2.绑定端口号 s3.监听socket s4.接受请求 s5.建立连接 c 地址转换函数字符串转in_addrin_addr转字符串 recvfrom和sendto 前言 上篇文章我们学习了计算机网络分层&#xff0c;了解了网络通信的本…

Vue3_对响应式对象解构赋值之后失去响应性——toRefs()

官网toRefs() :响应式 API&#xff1a;工具函数 | Vue.js toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref&#xff0c;请改用 toRef。 setup(){const state reactive({name:"张三"age:14})const stateAsToRefs toRef…

保留网络:大型语言模型的Transformer继任者

原文信息 原文题目&#xff1a;《Retentive Network: A Successor to Transformer for Large Language Models》 原文引用&#xff1a;Sun Y, Dong L, Huang S, et al. Retentive Network: A Successor to Transformer for Large Language Models[J]. arXiv preprint arXiv:2…

ArduPilot开源代码之Companion Computers简单分析

ArduPilot开源代码之Companion Computers简单分析 1. 源由2. 伴机系统2.1 APSync2.2 DroneKit2.3 FlytOS2.4 Maverick2.5 ROS2.6 Rpanion-server 3. 总结4. 参考资料 1. 源由 从稳定性&#xff0c;社区群体&#xff0c;以及开源方式的角度看&#xff0c;Ardupilot是不错的选择…