【ML|DL |python|pytorch|】基础学习

文章目录

检查Anaconda 环境

  • anaconda环境中有没有
    • python version
    • torch version
    • ...

检查Anaconda 环境 conda list -n pytorch


没有的话安装python以及torch

创建 python环境

conda create -n <环境名字> python=<版本号>

常用技巧(进阶) A. 跳过确认步骤 (一步到位) 如果你不想每次都按 y,可以加一个 -y 参数:
conda create -n gemini_env python=3.11 -y

创建时顺便安装其他库 conda create -n gemini_env python=3.11 google-generativeai jupyter -y

如果建错了,怎么删除?

conda env remove -n gemini_env

pip install python3.10.*

  1. conda install pytorch torchvision torchaudio -c pytorch

pytorch

tensor 张量

torch 张量

tensor
torch.tensor((2,2))
torch.ones_like()'
torch.zeros_like()
torch.rand((2,2))
torch.rand([2,2])
torch.rand((2,2,))
torch.rand([2,2,])

tensor attribution
  • a.dypte
  • a.shape
  • a.device

tensors函数

  • is_tensor() 判断是不是pytorch tensor
  • torch.is_nonzero(a)
  • ·torch.numel()· 这个tensor中元素的总数
关键区别:numel() vs len()

len(t):只返回第一维(第0维)的长度。

  • a=torch.zeros([5,5,])

  • -torch.set_default_tensor_type(torch.DoubleTensor) 修改 PyTorch 创建浮点数张量时的默认数据类型
python 复制代码
import torch

# 1. 修改默认类型为 Double (float64)
torch.set_default_tensor_type(torch.DoubleTensor)

# 2. 再次创建同样的张量
b = torch.tensor([1.2, 3.4])

# 3. 此时它自动变成了 float64
print(b.dtype)
# 输出: torch.float64

# 注意:整数不受影响,只有浮点数受影响
c = torch.tensor([1, 2])
print(c.dtype)
# 输出: torch.int64
  • torch.arange() 左闭右开,
  • torch.range() 闭区间
  • torch.eye()

  • torch.full()



不知道下面这个是什么

torch.cat()·

torch.cat() , 其中cat是Concatenate 缩写。

作用:(通俗讲,)就是将两个或者多个张量tensor像拼积木一样,将它们粘在一起。

E.G.

torch.cat([a, b], dim=1),其中,张量a,b分别为22方阵以及2 3的矩阵。

  • 拼接方向: dim=1,代表的是列方向。
  • dim=0 是代表我要拼接列的方向,列方向扩充。
三维张量

我们就用最直观的**"彩色图片"或者是"千层饼"**来理解三维张量的拼接。

在深度学习(特别是计算机视觉)中,一个三维张量的形状通常是: ( Channel , Height , Width ) (\text{Channel}, \text{Height}, \text{Width}) (Channel,Height,Width) 翻译过来就是:( ( (层数/厚度, 高度, 宽度 ) ) )

我们假设有两个完全一样的"积木块"(张量),形状都是 ( 2 , 3 , 4 ) (2, 3, 4) (2,3,4)

  • 2:有 2 层厚(比如 2 个颜色通道)。
  • 3:有 3 行高。
  • 4:有 4 列宽。
python 复制代码
# 创建两个形状为 (2, 3, 4) 的张量 t1 = torch.rand(2, 3, 4) t2 = torch.rand(2, 3, 4)

print(f"原始形状: {t1.shape}") ```

下面来看看在不同维度拼接会发生什么:

---

### 1. `dim=0`:拼接"厚度/层数" (变厚了)

这是在第 0 个维度拼接。你可以想象把 **t2 叠在 t1 的上面**。

*   **直观理解**:两片面包叠在一起,变成了双层巨无霸。
*   **数学变化**:$2+2=4$。
*   **结果形状**:$(4, 3, 4)$
*   **应用场景**:比如你有一张 RGB 图片(3通道),你想给它加一个透明度通道(Alpha),拼起来就变成了 RGBA(4通道)。

```python c0 = torch.cat([t1, t2], dim=0) print(f"dim=0 拼接后:
{c0.shape}") 
# 输出: torch.Size([4, 3, 4])  <-- 只有第0维变了 ```

---

### 2. `dim=1`:拼接"高度/行数" (变高了)

这是在第 1 个维度拼接。你可以想象把 **t2 放在 t1 的下面**(脚底下)。

*   **直观理解**:把两张图片**上下**拼在一起,变成一张长图。
*   **数学变化**:$3+3=6$。
*   **结果形状**:$(2, 6, 4)$
*   **限制**:厚度(2)和宽度(4)必须对齐才能拼。

```python c1 = torch.cat([t1, t2], dim=1) print(f"dim=1 拼接后:
{c1.shape}")
# 输出: torch.Size([2, 6, 4])  <-- 只有第1维变了 ```

---

### 3. `dim=2`:拼接"宽度/列数" (变宽了)

这是在第 2 个维度拼接。你可以想象把 **t2 放在 t1 的右边**。

*   **直观理解**:把两张图片**左右**拼在一起,变成一张全景宽图。
*   **数学变化**:$4+4=8$。
*   **结果形状**:$(2, 3, 8)$
*   **限制**:厚度(2)和高度(3)必须对齐才能拼。

```python c2 = torch.cat([t1, t2], dim=2) print(f"dim=2 拼接后:
{c2.shape}")
# 输出: torch.Size([2, 3, 8])  <-- 只有第2维变了 ```

---

### 总结图解

假设你的张量是一个 **长方体蛋糕**:

*   **`dim=0`**:**加高蛋糕的层数**(奶油层+蛋糕层+...)。底面积不变,蛋糕**变厚**。
*   **`dim=1`**:**延长蛋糕的长度**(前后拼接)。切面和宽度不变,蛋糕**变长**。
*   **`dim=2`**:**加宽蛋糕的宽度**(左右拼接)。切面和长度不变,蛋糕**变宽**。

**核心口诀:**
**指定哪个 dim,哪个 dim 的数字就相加,其余 dim 的数字保持不变。**
torch.chunk()

分离张量,分成指定的块数

语法:torch.chunk(tensor,chunks,dim=0)

torch.gather()

torch.gather

torch.gather(input, dim, index, *, sparse_grad=False, out=None) → Tensor
torch.gather

torch.reshap()

不改变原有元素顺序,仅改变表现的形状。

相关推荐
橘子编程1 小时前
仓颉语言变量与表达式解析
java·linux·服务器·开发语言·数据库·python·mysql
小琦QI1 小时前
STM32F407VET6+CCE4503学习笔记---IOLINK server
笔记·stm32·学习
老鱼说AI1 小时前
算法初级教学第四步:栈与队列
网络·数据结构·python·算法·链表
丝斯20111 小时前
AI学习笔记整理(27)—— 计算机视觉之语义分割和实例分割
人工智能·笔记·学习
无名小猴1 小时前
Burp Lab——WebSockets漏洞
学习
wxl7812271 小时前
从图片PDF到结构化文本:基于Python+Dify的批量OCR自动化解决方案
python·pdf·ocr
嘴贱欠吻!1 小时前
开源鸿蒙-Flutter基础-dart学习-1
学习·flutter·开源
呆萌很1 小时前
文件读写和异常处理练习题
python
杨超越luckly1 小时前
HTML应用指南:利用POST请求获取全国极氪门店位置信息
python·arcgis·html·数据可视化·门店数据