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.mzph.cn/news/23228.shtml

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

相关文章

修复 Adob​​e After Effects 预览无法工作/播放的方法技巧

Adobe After Effects 允许您预览视频和音频,而无需将其渲染为最终输出。当您无法在此应用程序中预览视频和音频时,一定会感到沮丧。不过不用担心,您可以尝试以下方法来修复 After Effects 预览不起作用的问题。 技巧1:重启After …

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数:⭐ 2、重载与重写区别 难度系数:⭐ 3、接口与抽象类的区别 难度系数:⭐ 4、深拷贝与浅拷贝的理解 难度系数:⭐ 5、sleep和wait区别 难度系数&a…

各种大数据概念笔记

各种大数据概念 1 数据仓库数据分层定义 1.1 方式1 宽表-topic 事实层-fact 基础整合层 1.2 方式二 ADS:Application Data Service,应用数据层 也可以称为或者发展为DM data marketing,供线上系统使用 CDM:Common Data Model DWD:Data Warehouse Detail,明细数据层。 也…

Mac电脑怎么使用“磁盘工具”修复磁盘

我们可以使用“磁盘工具”的“急救”功能来查找和修复磁盘错误。 “磁盘工具”可以查找和修复与 Mac 磁盘的格式及目录结构有关的错误。使用 Mac 时,错误可能会导致意外行为,而重大错误甚至可能会导致 Mac 彻底无法启动。 继续之前,请确保您…

DP-GAN-判别器代码

将输出的rgb作为输入,输入到判别器中。接着执行一个for循环,看一下body_down列表的组成和x经过body_down之后的值。 body_down是由残差块D组成的列表: 残差块的参数为:(3,128),(128,128),(128,256),(256,256),(256,512),(512,5…

64 # 实现一个 http-server

准备工作 上一节实现了通过 commander 的配置获取到用户的参数,下面完成借用 promise 写成类的方法一节没有完成的任务,实现一个 http-server,https://www.npmjs.com/package/http-server,http-server 是一个简单的零配置命令行静…

价值 1k 嵌入式面试题-计算机网络 OSI

开门见山 请讲下 OSI 各层协议的主要功能? 常见问题 回答不系统回答不确切无法和实际网络协议做关联对应 答题思路 OSI 代表了开放互联系统中信息从一台计算机的一个软件应用流到另一个计算机的另一个软件应用的参考模型 OSI 包含 7 层,每一层负责特…

java中使用Jsoup和Itext实现将html转换为PDF

1.在build.gradle中安装所需依赖: implementation group: com.itextpdf, name: itextpdf, version: 5.5.13 implementation group: com.itextpdf.tool, name: xmlworker, version: 5.5.13 implementation group: org.jsoup, name: jsoup, version: 1.15.32.创建工具…

大数据-玩转数据-FLINK-从kafka消费数据

一、基于前面kafka部署 大数据-玩转数据-Kafka安装 二、FLINK中编写代码 package com.lyh.flink04;import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apa…

网络安全进阶学习第十课——MySQL手工注入

文章目录 一、MYSQL数据库常用函数二、MYSQL默认的4个系统数据库以及重点库和表三、判断数据库类型四、联合查询注入1、具体步骤(靶场演示):1)首先判断注入点2)判断是数字型还是字符型3)要判断注入点的列数…

python入门常用操作

python常用操作 1、ndarry数组的切片2、print用法2.1格式化输出format2.2字符串格式化输出 3、均值滤波函数 1、ndarry数组的切片 例如一个5列的ndarry数组,想要获取第2列和第3列数据,可以用 #(1)用法1 data[:,1:3],…

【HarmonyOS】实现从视频提取音频并保存到pcm文件功能(API6 Java)

【关键字】 视频提取类Extractor、视频编解码、保存pcm文件 【写在前面】 在使用API6开发HarmonyOS应用时,通常会开发一些音视频媒体功能,这里介绍如何从视频中提取音频保存到pcm文件功能,生成pcm音频文件后,就可使用音频播放类…

软件测试与游戏测试的区别

软件测试和游戏测试是两种不同领域的测试活动,它们之间存在一些区别,包括以下几个方面: 1. 测试目标 软件测试主要是验证和确认软件功能是否符合预期,通常关注软件的正确性、稳定性和兼容性等方面;而游戏测试则更关注游…

selenium官网文档阅读总结(day 2)

1.selenium元素定位方法 1.1selenium命令 当我们使用chormdriver打开网页后,接下来就要用python操作元素,模拟用户会作出的操作,这些操作元素的方法就是命令。比如 (1) click:点击(按钮,单选框&#xff…

2024年浙师大MBA项目招生信息全面了解

2024年全国管理类硕士联考备考已经到了最火热的阶段,不少考生开始持续将注意力集中在备考的规划中!杭州达立易考教育整合浙江省内的MBA项目信息,为大家详细梳理了相关报考参考内容,方便大家更好完成择校以及针对性的备考工作。本期…

数据结构-栈队列链表树

1 栈 概念 栈是⼀个线性结构,在计算机中是⼀个相当常⻅的数据结构。栈的特点是只能在某⼀端添加或删除数据,遵循先进后出的原则 实现 每种数据结构都可以⽤很多种⽅式来实现,其实可以把栈看成是数组的⼀个⼦集,所以这⾥使⽤数…

为什么list.sort()比Stream().sorted()更快?

真的更好吗&#xff1f; 先简单写个demo List<Integer> userList new ArrayList<>();Random rand new Random();for (int i 0; i < 10000 ; i) {userList.add(rand.nextInt(1000));}List<Integer> userList2 new ArrayList<>();userList2.add…

使用 RediSearch 在 Redis 中进行全文检索

原文链接&#xff1a; 使用 RediSearch 在 Redis 中进行全文检索 Redis 大家肯定都不陌生了&#xff0c;作为一种快速、高性能的键值存储数据库&#xff0c;广泛应用于缓存、队列、会话存储等方面。 然而&#xff0c;Redis 在原生状态下并不支持全文检索功能&#xff0c;这使…

备战秋招 | 笔试强训24

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、请指出选择排序&#xff0c;冒泡排序&#xff0c;快速排序的时间复杂度分别是&#xff08;&#xff09; A. O(n^2)、O(n^2)、O(n*log2n) B. O(n*log2n)、、O(n^2)、O(n*log2n&#xff09; C. O(n…

[虚幻引擎 MongoDB Client 插件说明] DTMongoDB MongoDB数据库连接插件,UE蓝图可以操作MongoDB数据库增删改查。

本插件可以在UE里面使用蓝图操作MongoDB数据库&#xff0c; 对数据库进行查询&#xff0c;删除&#xff0c;插入&#xff0c;替换&#xff0c;更新操作。插件下载地址在文章最后。 1. 节点说明 DT MongoDB | Client Create MongoDB Client - 创建客户端对象 创建一个 MongoDB 客…