前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PyTorch学习笔记合集

PyTorch学习笔记合集

作者头像
CtrlX
发布于 2023-03-21 03:55:55
发布于 2023-03-21 03:55:55
76000
代码可运行
举报
文章被收录于专栏:C++核心编程C++核心编程
运行总次数:0
代码可运行

PyTorch环境的配置和安装

conda常用命令

一、conda命令

conda 命令可以用来:

  • 创建新的 conda 环境。
  • 在现有的 conda 环境中安装/升级包。
  • 查询/搜索 Anaconda 包的索引和当前 Anaconda 的安装。

Tip: 我们可以将前面带有两个短线(--)的常用命令进行缩写(并不是所有的都可以缩写),方法是取一个短线和选项的首字母。例如 --name 可以缩写成 -n--envs 可以缩写成 -e

使用 conda -V 以查看当前的 conda 版本。

我们可以通过命令行来寻求相应的帮助,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda --help

当然也可以使用缩写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda -h

如果我们想要进一步查看 install 命令该如何使用,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install -h

二、conda info

conda info 可以用来查看相关信息,其格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda info [-a] [--base] [-e] [-s] [--unsafe-channels]

-a, -all: 查看所有信息(不常用)。


–base:查看基环境所在路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda info --base

-e, –envs:列出当前所有的 conda 环境。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda info -e

-s, –system:列出所有的环境变量(不常用)。


–unsafe-channels:查看令牌公开的频道。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda info --unsafe-channels

三、conda create

conda create 可以用来创建新的 conda 环境,其格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create [-n env_name | -p path] [--clone env_name] [-c channel_address]
             [packages]

-n, –name:我们可以根据环境名称来创建一个 conda 环境,假设我们的环境名称为 my_env

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n my_env

创建完成后,我们使用如下命令进入该环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda activate my_env

此时命令行前面多了一个 (my_env),这个是我们进入了该环境的标志

使用 conda list 命令来查看该环境下都安装了哪些包。

因为我们并没有在创建环境的时候安装包,所以结果自然是什么都没有

如果要退出该环境,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda deactivate

注意: 我们只能退到基环境,在基环境下继续退出依然在基环境。


-p, –prefix:除了根据名称创建环境以外,我们还可以根据地址来创建 conda 环境。

在上面的例子中,我们创建的 my_env 环境的地址为:G:\anaconda3\envs\my_env。事实上,如果不指定地址,则所有的环境都会创建在 ...\anaconda3\envs\ 下。

若要根据地址来创建,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -p G:\anaconda3\envs\my_env

–clone--clone 主要用来克隆(复制)现有的环境。

我们可以根据现有环境的名称来进行克隆,假设现有环境的名称为 original_env,新的环境的名称为 new_env,则只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n new_env --clone original_env

当然我们也可以根据现有环境的地址来进行克隆:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n new_env --clone G:\anaconda3\envs\original_env

-c, –channel:首先来介绍一下什么是 conda 频道。

conda 频道是存储 包 的位置,安装 包 时 conda 会搜索现有的频道集合,并选取其中一个频道来安装 包。

conda 的默认频道是 https://repo.anaconda.com/pkgs/,但该频道需要付费,我们一般使用 conda-forge 这个频道来进行安装,它是免费的。

有关频道的设置这里从略,后续的章节会陆续提及。


packages:我们新创建的环境如果不安装必要的包是无法使用的,需要安装的包用空格隔开,即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n my_env python numpy flask

我们用该命令创建了一个叫 my_env 的环境,同时安装了三个包 pythonnumpyflask

安装完成后,可以使用 conda list 命令查看已经安装的包。

此外,我们的 python 安装的是最新版本,当然我们也可以指定版本进行安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n my_env python=3.9.7 numpy flask

四、conda install

conda install 可以用来在 conda 环境中安装相应的包,具体格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install [-n env_name | -p path] [-c channel_address] [packages]

已经介绍的选项这里就不再介绍了。

例如,我们要在 my_env 下安装 3.9.7 版本的 python。我们可以先进入该环境,然后安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda activate my_env
conda install python=3.9.7

注意,这里的 = 实际上是模糊约束,详情见下图:

也可以直接指定环境安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install -n my_env python=3.9.7 # 根据名称
conda install -p G:\anaconda3\envs\my_env python=3.9.7 # 根据地址

再例如,安装 cvxpy 时,我们可以从指定的频道(conda-forge)进行安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install -n my_env -c conda-forge cvxpy

五、conda remove

conda remove 可以用来移除 conda 环境中的某些包,也可以移除整个环境,具体格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda remove [-n env_name | -p path] [packages] [--all]

例如,如果我们需要移除 my_env 下的 numpy,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda remove -n my_env numpy

当然我们也可以移除所有包(即整个conda环境)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda remove -n my_env --all

需要注意的是,conda 没有提供重命名环境的命令,我们只能先克隆一份原来的环境,然后再删除原来的环境,具体操作如下(例如将环境 a 重命名成 b):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n b --clone a
conda remove -n a --all

conda uninstallconda remove别名,我们也可以使用 conda uninstall 来移除包,方法是相同的。

六、conda list

conda list 用来列出 conda 环境中的包,具体格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda list [-n env_name | -p path] [package]

conda list 只列出当前环境的所有包,若要列出其他环境的包,例如列出 my_env 下的所有包,只需执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda list -n my_env

若要列出 my_env 中与 numpy 相关的包(准确地来说是含有 numpy 字样的包),只需执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda list -n my_env numpy

基于此,我们可以使用 conda list 来查询当前环境是否安装了相应的包(每次只能查询一个),如果最后的结果没有列出,那就说明没有安装。

七、conda search

conda search 用来搜索指定的包,具体格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda search [-c channel_address] [-f] [packages]

我们可以指定在 conda-forge 中搜索 numpy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda search -c conda-forge numpy

事实上,上述命令会搜索到所有包含 numpy 字样的包,如果我们只想搜索 numpy 这个包,需要加上 -f--full-name 的缩写),即

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda search -c conda-forge -f numpy

八、conda update

conda update 用来将一系列的包升级到最新版本,具体格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda update [-n env_name | -p path] [packages] [--all]

例如,如果我们想要升级 my_env 下的 numpyscipy,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda update -n my_env numpy scipy

如果我们要想更新 my_env 中的所有包,则需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda update -n my_env --all

如果要更新 conda 本身,则需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda update conda

如果要更新 anaconda ,则需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda update anaconda

注: 升级 Anaconda 前需要先升级 conda

九、conda config

conda config 用来配置 conda 的频道,相关信息会存储在 C:\Users\你的用户名\.condarc 文件中。

添加一个频道的格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda config --add channels [channel]

例如,若要添加 conda-forge 这个频道,只需执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda config --add channels conda-forge

由于国外频道速度一般不稳定,我们通常考虑使用国内的频道,例如清华镜像

考虑到 Windows 用户无法直接创建名为 .condarc 的文件,我们可以先执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda config --set show_channel_urls yes

然后再直接修改该文件。

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

修改完后,执行 conda clean -i 清除索引缓存,保证用的是镜像站提供的索引。

设置完后,我们可以执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda config --get channels

来查看已经添加的频道。

配置环境

创建一个虚拟环境

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n pytorch python=3.10
conda activate pytorch

安装pytorch

从官网复制需要的指令https://pytorch.org/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install pytorch torchvision torchaudio cpuonly -c pytorch #cpu版本

虚拟环境中安装jupyter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install jupyter notebook	
jupyter notebook #启动

按住Shift + 回车 运行并切换到下一行

Python两个重要函数

两个函数

dir函数

能让我们知道工具箱,以及工具箱中的分隔区有什么东西

help函数

能让我们知道每个工具箱中的工具是如何使用的。

实战操作

Pycharm,jupyter使用场景

以一个错误的程序为例子

python文件

一个块一个快递执行

用于存储一些代码信息

python控制台

常用:一行一行的执行

也可以以块为单位运行,但是报错信息较多,影响美观

利用python控制到进行一个小区域的调试

jupyter

以任意行为块运行

jupter用于一个小的项目,或者一个小的区域的调试

对比

①是遇到错误时的状态 ②是修改错误后运行的状态

PyTorch加载数据

Dataset

  • 提供一种方式去获取数据及其lable
    • 如何获取每一个数据及其lable
    • 告诉我们总共有多少的数据

Dataloader

  • 为后面的网络提供不同的数据形式

Dataset实战

通过两个函数查询相应用法

使用pycharm的控制台可以方便的查看每个变量详细的值和信息(右侧)

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch.utils.data import Dataset
from PIL import Image
import os

class MyDdata(Dataset):
    def __init__(self,root_dir,lable_dir):
        self.root_dir = root_dir
        self.lable_dir = lable_dir
        self.path = os.path.join(self.root_dir,self.lable_dir)
        self.img_path = os.listdir(self.path)

    def __getitem__(self, idx):
        img_name = self.img_path[idx]
        img_item_path = os.path.join(self.root_dir,self.lable_dir,img_name)
        img = Image.open(img_item_path)
        lable = self.lable_dir
        return img,lable

    def __len__(self):
        return len(self.img_path)

root_dir = "dataset/train"
ants_lable_dir = "ants"
bees_lable_dir = "bees"
ants_dataset = MyDdata(root_dir,ants_lable_dir)
ants_dataset = MyDdata(root_dir,bees_lable_dir)

TensorBoard

Transform

torchversion中的数据集的使用

Dataloader的使用

神经网络

神经网络的基本骨架-nn.Module的使用

卷积操作

神经网络-卷积层

神经网络-最大池化的使用

神经网络-非线性激活

神经网络-线性层及其他层的介绍

神经网络-搭建小实战和Sequential的使用

损失函数和反向传播

优化器

现有网络模型的使用及修改

网络模型的保存与读取

完整的模型训练套路

利用GPU训练

完整的模型验证套路

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
关于 MyBatis 我总结了 10 种通用的写法
foreach元素的属性主要有item,index,collection,open,separator,close。
逆锋起笔
2020/04/24
1.4K0
Mybatis动态SQL
通过修改对象属性的方式,可以满足大多数的数据传输对象(Data Transfer Object,DTO)以及绝大部分领域模型的要求。 但有些情况下你想使用不可变类。 通常来说,很少或基本不变的、包含引用或查询数 据的表,很适合使用不可变类。 构造方法注入允许你在初始化时 为类设置属性的值,而不用暴露出公有方法。MyBatis 也支持私有属性和私有 JavaBeans 属 性来达到这个目的,但有一些人更青睐于构造方法注入。constructor 元素就是为此而生的。
端碗吹水
2020/09/23
2.2K0
Mybatis动态SQL
SpringBoot学习笔记(五)——Spring Boot中使用MyBatis进阶
mybatis框架运行时可以调整一些运行参数。比如,开启二级缓存,开启延迟加载等等。全局参数会影响mybatis的运行行为。
张果
2022/05/09
1.7K0
SpringBoot学习笔记(五)——Spring Boot中使用MyBatis进阶
MyBatis学习总结(三)——多表关联查询与动态SQL
假定一个员工(emp)拥有一个登录用户(user),员工与用户表之间是一对一关系:
张果
2018/10/09
8.2K0
MyBatis学习总结(三)——多表关联查询与动态SQL
MyBatis魔法堂:即学即用篇
一、前言                                          本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,遵循Make it work,better and excellent原则。 技术栈为MyBatis3.2.7+log4j1.2.17+sqlite3+jdk1.7。 二、示例                                 示例代码功能:     学校人员管理系统,对象分别为学生、教师和班级,学生与班级为多对一关系,班级与教师为
^_^肥仔John
2018/01/18
1.5K0
MyBatis学习总结(一)——ORM概要与MyBatis快速起步
程序员应该将核心关注点放在业务上,而不应该将时间过多的浪费在CRUD中,多数的ORM框架都把增加、修改与删除做得非常不错了,然后数据库中查询无疑是使用频次最高、复杂度大、与性能密切相关的操作,我们希望得到一种使用方便,查询灵活的ORM框架,MyBatis可以满足这些要求,MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架,它也是SSM框架集成中的重要组成部分。
张果
2018/10/09
8640
MyBatis学习总结(一)——ORM概要与MyBatis快速起步
mybatis之动态SQL
Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了 解决 拼接SQL语句字符串时的痛点问题。
一个风轻云淡
2022/11/15
2640
史上超强最常用SQL语句大全
关于查询语句有很多,这里基础的不再介绍。主要介绍排序查询、聚合函数、模糊查询、分组查询、分页查询、内连接、外连接、子查询
全栈程序员站长
2022/07/01
5370
_Mybatis分解式查询
也可以使用分解式查询,即将一个连接Sql语句分解为多条Sql语句,如: # 查询班级时关联查询出学生
会洗碗的CV工程师
2023/11/20
1490
_Mybatis分解式查询
呕心沥血写了三天3两夜24k字的MySQL详细教程
 存储数据的仓库. 其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
陶然同学
2023/02/27
7200
呕心沥血写了三天3两夜24k字的MySQL详细教程
Mybatis基础
虽然我们能够通过JDBC来连接和操作数据库,但是哪怕只是完成一个SQL语句的执行,都需要编写大量的代码,更不用说如果我还需要进行实体类映射,将数据转换为我们可以直接操作的实体类型,JDBC很方便,但是还不够方便。
用户9645905
2023/10/29
3900
Mybatis基础
mybatis.5.动态SQL
1.动态SQL,解决关联sql字符串的问题,mybatis的动态sql基于OGNL表达式
张哥编程
2024/12/17
1220
Mybatis分解式查询
一、Mybatis一对多分解式查询 分解式查询就是将一条Sql语句拆分成多条 在MyBatis多表查询中,使用连接查询时一个Sql语句就可以查询出所有的数据。如: # 查询班级时关联查询出学生 select *    from classes    left join student    on student.classId = classes.cid 也可以使用分解式查询,即将一个连接Sql语句分解为多条Sql语句,如: # 查询班级时关联查询出学生 select * from
会洗碗的CV工程师
2023/04/12
3990
Mybatis分解式查询
MySQL基础及SQL入门
1)什么是SQL? 结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 2)SQL的作用
用户5513909
2023/04/25
4130
MySQL基础及SQL入门
MyBatis 从入门到放弃 ( MyBatis基础总结 )
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
愷龍
2022/11/12
9670
MyBatis 从入门到放弃 ( MyBatis基础总结 )
【Mybatis】动态sql
小尘要自信
2023/10/10
2050
Mybatis基础
这里的 <log4j:configuration xmlns:log4j=”http://jakarta.apache.org/log4j/"> 在 Idea 中会报错
OY
2022/03/17
1.1K0
Mybatis基础
Mybatis学习笔记--[持续更新中]
MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁 移到了Google Code。随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。代码于 2013年11月迁移到Github。
SerMs
2022/03/30
6960
Mybatis学习笔记--[持续更新中]
MyBatis详细使用示例
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
鱼找水需要时间
2023/02/16
6780
MyBatis详细使用示例
MyBatis框架(三)动态SQL,分页,二进制存入数据库图片
一、动态sql语句,分页 1, <if>条件   <if test="key!=null">   拼接sql语句   </if> 2, <choose><when><otherwise> 注意:只能执行一个分支   <choose>   <when test="key=='value'">   拼接sql语句   </when>   <when test="key=='value'">   拼接sql语句   </when>   <othe
二十三年蝉
2018/02/28
2K0
相关推荐
关于 MyBatis 我总结了 10 种通用的写法
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • PyTorch环境的配置和安装
    • conda常用命令
      • 一、conda命令
      • 二、conda info
      • 三、conda create
      • 四、conda install
      • 五、conda remove
      • 六、conda list
      • 七、conda search
      • 八、conda update
      • 九、conda config
    • 配置环境
  • Python两个重要函数
    • 两个函数
    • 实战操作
  • Pycharm,jupyter使用场景
    • python文件
    • python控制台
    • jupyter
    • 对比
  • PyTorch加载数据
    • Dataset实战
  • TensorBoard
  • Transform
  • torchversion中的数据集的使用
  • Dataloader的使用
  • 神经网络
    • 神经网络的基本骨架-nn.Module的使用
    • 卷积操作
    • 神经网络-卷积层
    • 神经网络-最大池化的使用
    • 神经网络-非线性激活
    • 神经网络-线性层及其他层的介绍
    • 神经网络-搭建小实战和Sequential的使用
  • 损失函数和反向传播
  • 优化器
  • 现有网络模型的使用及修改
  • 网络模型的保存与读取
  • 完整的模型训练套路
  • 利用GPU训练
  • 完整的模型验证套路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档