深度学习|李哥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数组

相关推荐
静听松涛1332 小时前
通用人工智能(AGI)的阶段性定义与里程碑
人工智能
Blossom.1182 小时前
大模型分布式训练通信优化:从Ring All-Reduce到分层压缩的实战演进
人工智能·分布式·python·深度学习·神经网络·机器学习·迁移学习
程序员泠零澪回家种桔子2 小时前
RAG自查询:让AI精准检索的秘密武器
人工智能·后端·算法
猿小猴子2 小时前
主流 AI IDE 之一的 Claude Code 介绍
人工智能·claude code
wechat_Neal2 小时前
Overview of AI concepts-Speech
人工智能
山后太阳2 小时前
嵌入式TensorFlow Lite教程,从环境搭建到模型部署
人工智能·python·tensorflow
国科安芯2 小时前
微小卫星红外相机双MCU冗余架构的抗辐照可靠性评估
人工智能·单片机·嵌入式硬件·数码相机·架构·自动化·安全性测试
JOBkiller1232 小时前
基于YOLO11的排水管道缺陷检测与分类系统_2
人工智能·机器学习·分类