深度学习|李哥1

python基础

ps:针对po主自身的遗忘知识进行补充,

1. python继承

python 复制代码
class person():#注意这里有()
	def __init__(self,name,age):
		self.name = name
		self.age = age
	
	def print_name(self):
		print(name)
	def print_age(self):
		print(age)
myname = person("wan",18) #实例化。之后才能调用函数使用
print(myname.print_name())#这里返回结果为None,因为print_name()没有返回值


class superman(person):
	def __inti__(self,name,age):
		super(superman,self).__init__(name,age)#注意
		self.fly_ = True
	
	def fly(self):
		if self.fly_ == True:
			print("我会飞")

2.numpy

python 复制代码
list1 = [
        [1,2,3,4,5],
        [6,7,8,9,10],
        [11,12,13,14,15]
    ]# 3行5列 构造成张量
array = np.array(list1) #把list1 转化成矩阵

list1[1:3] #取出第2,3行的子列表
array[:, :] #先取行,再取列,这里全部行列都取

idx = [1,3]
array([: idx]) #所有行 + 第2列 + 第3列

3.tensor张量

(1) 列表转数组/张量

python 复制代码
 list1 = [
         [1,2,3,4,5],
         [6,7,8,9,10],
         [11,12,13,14,15]
     ]
 print(list1)  # 打印原生Python二维列表
 array = np.array(list1)  # 列表转NumPy数组
 tensor1 = torch.tensor(list1)  # 列表转PyTorch张量
 print(tensor1)  # 打印PyTorch张量(格式比NumPy更贴近深度学习框架)
 print(array)  # 打印NumPy数组

输出结果

(2)pytorch自动求导

python 复制代码
 x = torch.tensor(3.0)  # 创建标量张量(单个数值),值为3.0
 x.requires_grad_(True)  # 开启梯度追踪:告诉PyTorch要记录x的运算,用于后续求导
 y = x**2  # 计算y = x²,PyTorch会构建「计算图」(记录y依赖x的运算过程)
 y.backward()  # 反向传播:计算y对x的梯度(导数),梯度会存到x.grad中(理论值=2*x=6.0)

 x = x.detach()  # 剥离梯度追踪:返回新张量,和原x共享数据,但不再记录运算(requires_grad=False)
 x.grad = torch.tensor(0.0)  # 手动将x的梯度置0(通常在优化器更新参数后做,这里是手动演示)
 y2 = x**2  # 此时x已剥离梯度,PyTorch不会构建计算图
 y2.backward()  # ❌ 这里会报错!因为y2没有梯度追踪,无法反向传播
# print(y2)  # 若忽略报错,会输出9.0(3²)
# print(x.grad)  # 输出0.0(因为反向传播失败,梯度未更新)

(3) 张量初始化

python 复制代码
tensor1 = torch.ones((100,4))# 100行 x 4 列的全为1)
print(tensor1)
tensor2 = torch.zeros((10,4)) # 10 个4列的全为0
print(tensor2)

tensor3 = torch.normal(10,1,(3,10,4))# 正态分布
# normal(均值,标准差,三维向量)
print(tensor3))

torch.ones((100,4))表示shape为(100,4)全为1的二维张量

torch.normal(正态分布随机数字)

注意上述代码中的()两层括号

上述结果

复制代码
tensor([[1., 1., 1., 1.],
    [1., 1., 1., 1.],
    ...,  # 共100行
    [1., 1., 1., 1.]])

tensor([[0., 0., 0., 0.],
    [0., 0., 0., 0.],
    ...,  # 共10行
    [0., 0., 0., 0.]])

tensor([[[ 9.2990, 10.3007, 11.7141,  8.4621],
     [ 8.9293, 11.7105,  9.7123, 10.5644],
     [10.5153,  9.0564, 10.2623, 11.8146],
     [ 9.6422,  8.5480,  9.0676,  9.1018],
     [ 8.9979, 10.1083,  9.2720, 10.3965],
     [11.6095, 12.1560,  9.7455, 11.2057],
     [10.3238, 10.3913,  9.7489, 11.1586],
     [10.3277,  9.9176,  8.7060,  9.4850],
     [11.6660,  9.8273, 10.0534, 11.0817],
     [ 7.6588,  9.7928, 10.2590, 11.3895]],

    [[ 9.2820, 10.3872,  9.7100,  9.1333],
     [ 9.2947, 10.0347, 11.1755,  9.9202],
     [10.9146, 11.0291,  9.5526, 10.4831],
     [11.0311, 10.3769, 11.4328,  9.3844],
     [10.2222, 10.0463, 10.8848, 12.3220],
     [10.4420,  8.0401, 10.6381,  9.4674],
     [11.4755, 11.3810,  8.4529,  8.1777],
     [11.2544,  8.3422, 11.7195,  9.2538],
     [ 9.8136,  8.8172, 10.8308, 10.2737],
     [10.1588, 10.9774, 11.0225,  7.1054]],

    [[ 9.1870, 10.3700,  9.4246, 10.0032],
     [11.0332, 10.0739,  9.6832, 10.6644],
     [10.7322,  9.4124,  8.5966, 11.5322],
     [10.0094, 10.2329, 10.3478,  9.2008],
     [10.7984,  8.8747, 10.2707, 11.7471],
     [ 9.5634, 10.0287,  9.5285, 10.8278],
     [ 9.3333, 10.1836, 10.3081, 10.2077],
     [ 9.7549,  9.4539, 10.4862,  9.7735],
     [10.2071, 10.4261, 11.3190,  9.7748],
     [11.9193, 10.1932, 11.4428, 10.0864]]])

(4) 张量求和 + 查看张量形状

python 复制代码
tensor1 = torch.ones((10,4))
sum1 = torch.sum(tensor1, dim=1, keepdim=True)

print(sum1)
print(tensor1.shape)

sum(目标张量,求和维度(0 = 下,1 = 右),保持原维度结构不变)

keepdim = 默认是False,求和后变成10行1列,当keepdim = True 时,求和后变成1行10列

复制代码
tensor([[4.],
        [4.],
        [4.],
        [4.],
        [4.],
        [4.],
        [4.],
        [4.],
        [4.],
        [4.]])  加了keepdim = True
tensor([4., 4., 4., 4., 4., 4., 4., 4., 4., 4.]) # 不加keepdim 默认False
torch.Size([10, 4])

二、 pytorch基本操作

1、创建张量的函数

torch.normal(0, 1, (data_num, len(w))) - 生成正态分布的张量

torch.tensor([8.1,2,2,4]) - 创建指定值的张量

torch.tensor(1.1) - 创建标量张量

2、数学运算函数

torch.matmul(x, w) - 矩阵乘法运算

torch.sum(abs(pre_y-y)) - 计算张量元素的和

torch.abs() - 计算绝对值(在maeLoss函数中)

3、张量属性

requires_grad=True - 设置张量是否需要计算梯度

shape - 获取张量的形状信息

4、梯度相关操作

loss.backward() - 执行反向传播计算梯度

para.grad - 访问参数的梯度值

para.grad.zero_() - 将梯度值清零

5、张量转换方法

detach() - 从计算图中断开张量,返回一个新的张量但不参与梯度计算

numpy() - 将PyTorch张量转换为NumPy数组

相关推荐
那个村的李富贵6 小时前
光影魔术师:CANN加速实时图像风格迁移,让每张照片秒变大师画作
人工智能·aigc·cann
腾讯云开发者7 小时前
“痛点”到“通点”!一份让 AI 真正落地产生真金白银的实战指南
人工智能
CareyWYR7 小时前
每周AI论文速递(260202-260206)
人工智能
hopsky8 小时前
大模型生成PPT的技术原理
人工智能
禁默9 小时前
打通 AI 与信号处理的“任督二脉”:Ascend SIP Boost 加速库深度实战
人工智能·信号处理·cann
心疼你的一切9 小时前
昇腾CANN实战落地:从智慧城市到AIGC,解锁五大行业AI应用的算力密码
数据仓库·人工智能·深度学习·aigc·智慧城市·cann
AI绘画哇哒哒9 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
数据分析能量站9 小时前
Clawdbot(现名Moltbot)-现状分析
人工智能
那个村的李富贵9 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
二十雨辰9 小时前
[python]-AI大模型
开发语言·人工智能·python