文章目录
-
- [检查Anaconda 环境](#检查Anaconda 环境)
-
- 没有的话安装python以及torch
-
- [创建 python环境](#创建 python环境)
- 如果建错了,怎么删除?
- pytorch
-
- [tensor 张量](#tensor 张量)
-
- [tensor attribution](#tensor attribution)
- tensors函数
-
- [关键区别:numel() vs len()](#关键区别:numel() vs len())
- `torch.cat()`·
- torch.chunk()
- torch.gather()
- torch.reshap()
检查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.*
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 tensortorch.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()
不改变原有元素顺序,仅改变表现的形状。
