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

相关推荐
NAGNIP1 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab2 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab2 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP6 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年6 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼6 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS6 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区8 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈8 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang8 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx