零基础学python-3.5 内存管理

本文深入探讨了Python中变量的管理方式,包括无需声明与指定类型的特性,并解析了Python的引用计数垃圾回收机制。通过具体代码示例展示了整型、浮点型与复合数据类型在内存管理上的差异。

* 变量无需事先声明

* 变量无需指定类型

* 程序员不用关系内存管理

* 变量名会被回收

* del可以直接释放资源

1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法,我下面举两个例子

x = 4
y = 4
aList = [1, 2, 3]
bList = [1, 2, 3]
print(x is y)
print(x == y)
print(aList is bList)
print(aList == bList)
a = 3.2
b = 3.2
print(a is b) 
print(a == b)

输出结果:

True
True
False
True
True
True

从输出结果分析我们得出下面结论,

1)如果单纯是整形、浮点型、字符串型这些,返回的都是同一个结果,因为它们值相同,而且引用的地址也相同

2)如果是列表、元组、字典等,由于两个对象存储不同的地址,即便是值相同,但是如果对比引用地址,还是返回false



2.通过del,可以删除对象

接着上面的代码:

x = 4
y = 4
print(x is y)
print(x == y) 
aList = [1, 2, 3]
bList = [1, 2, 3]
print(aList is bList)
print(aList == bList) 
a = 3.2
b = 3.2
print(a is b) 
print(a == b)
del a
a

输出结果:

True
True
False
True
True
True
Traceback (most recent call last):
  File "D:\myWorkSpace\CRUDFile\com\ray\test\CRUDFile.py", line 14, in <module>
    a
NameError: name 'a' is not defined


出现错误信息,a变量没有定义,因为我们通过del 把a释放掉





<think>我们讨论的是习AI大模型需要掌握的Python程度。以下将分层次说明所需掌握的Python知识,并给出关键代码示例。###一、基础必备能力1. **核心语法精通**-变量、数据类型、流程控制-函数定义与参数传递(位置参数、关键字参数、默认参数)-异常处理(try-except-finally)2.**数据结构深入**-列表推导式与生成器表达式-字典的高级操作(setdefault,defaultdict)-集合运算(交集、并集、差集)```python#数据结构示例:处理词频统计text= "人工智能是未来发展趋势人工智能改变世界"words =text.split() #使用字典统计词频word_count= {}for wordin words:word_count[word] =word_count.get(word,0)+1#使用defaultdict简化fromcollections importdefaultdictword_count= defaultdict(int)for wordin words:word_count[word] +=1#使用Counterfromcollections importCounterword_count= Counter(words)print(word_count.most_common(1))#输出频率最高的词```###二、进阶能力要求1. **面向对象编程**-类与继承-特殊方法(`__call__`,`__getitem__`)-属性管理(@property)2.**函数式编程**- lambda函数- map/filter/reduce- functools.partial```python#函数式编程示例:数据处理管道data= [1.2,3.5, -2.8,5.9, -4.1] #步骤:取绝对值 →四舍五入 →过滤正值importmathprocessed= filter(lambda x: x>0,map(lambda x: round(math.abs(x)), data) )print(list(processed))#输出:[1,4,6]``` ###三、AI专项能力1.**NumPy数组操作**-创建多维数组-广播机制-高级索引```pythonimport numpyas np#创建矩阵matrix =np.array([[1,2],[3,4]]) #广播示例vector= np.array([10,20]) result= matrix*vector#广播发生print(result)```2.**PyTorch/TensorFlow模型构建**-张量创建与操作-自动求导机制-自定义层与模型```python#PyTorch模型定义示例importtorchimport torch.nn asnnclass SimpleNN(nn.Module):def__init__(self):super().__init__()self.fc1= nn.Linear(784,128)self.relu= nn.ReLU()self.fc2= nn.Linear(128,10)def forward(self,x):x= self.fc1(x)x =self.relu(x)return self.fc2(x) model= SimpleNN()print(model) ```###四、高阶能力1.**并行与分布式**-多进程(multiprocessing)-PyTorchDistributedDataParallel2.**性能优化**-内存视图(memoryview)- Numba加速- Cython集成```python#多进程数据处理示例from multiprocessingimport Pooldefprocess_data(data):#模拟耗时操作returndata *2if__name__ =="__main__":with Pool(4) asp:results= p.map(process_data, range(10))print(results) ```###五、习路线建议```mermaidgraphLRA[基础语法] -->B[函数+OOP]B -->C[NumPy/Pandas] C--> D[PyTorch基础] D--> E[模型训练]E -->F[分布式训练] ```###六、关键工具链|工具|用途|习重点| |---------------|-----------------------|-----------------------|| **Jupyter**|交互式实验| Notebook魔法命令|| **PyTorch**|深度习框架| Autograd,DataLoader| |**HuggingFace**|预训练模型| Transformers API|---### §§相关问题§§:1.在PyTorch中如何实现自定义损失函数?2. NumPy广播机制的具体规则是什么?3.多进程处理数据时如何避免内存爆炸?4.HuggingFace Transformers库加载预训练模型的基本步骤是什么?</think>### 习AI大模型所需的Python技能深度解析 #### **一、基础核心能力(必须精通)** 1. **数据结构与算法** ```python # 必须掌握的高级数据结构操作 # 1. 字典推导式与复杂嵌套 model_config = {f"layer_{i}": {"units": i*128, "activation": "relu"} for i in range(1, 6)} # 2. 生成器表达式处理大数据 data_stream = (batch.reshape(-1, 784) for batch in data_loader if batch.size > 0) # 3. 自定义数据结构 from dataclasses import dataclass @dataclass class ModelParams: learning_rate: float = 0.001 batch_size: int = 64 dropout: float = 0.3 ``` 2. **函数式编程** ```python # 高阶函数应用 def apply_transforms(data, *transforms): return reduce(lambda d, fn: fn(d), transforms, data) # 闭包实现配置封装 def create_optimizer(learning_rate): def optimizer(model_params): return torch.optim.Adam(model_params, lr=learning_rate) return optimizer ``` #### **二、AI关键专项技能** 1. **NumPy/PyTorch张量操作** ```python # 张量核心操作 import torch # 1. 维度变换与广播 x = torch.randn(32, 1, 5, 5) y = torch.randn(32, 16, 5, 5) z = x * y # 自动广播 # 2. 高级索引 selected = y[:, [3, 7, 11], ::2, ::2] # 3. 自定义梯度计算 class CustomLoss(torch.autograd.Function): @staticmethod def forward(ctx, input, target): ctx.save_for_backward(input, target) return (input - target).abs().mean() @staticmethod def backward(ctx, grad_output): input, target = ctx.saved_tensors grad = torch.sign(input - target) / input.numel() return grad_output * grad, None ``` 2. **OOP与模型架构设计** ```python # 自定义模型组件 import torch.nn as nn class ResidualBlock(nn.Module): def __init__(self, channels): super().__init__() self.conv1 = nn.Conv2d(channels, channels, 3, padding=1) self.bn1 = nn.BatchNorm2d(channels) self.conv2 = nn.Conv2d(channels, channels, 3, padding=1) self.bn2 = nn.BatchNorm2d(channels) def forward(self, x): residual = x out = nn.ReLU()(self.bn1(self.conv1(x))) out = self.bn2(self.conv2(out)) out += residual return nn.ReLU()(out) ``` #### **三、高阶能力要求** 1. **分布式训练** ```python # PyTorch分布式示例 import torch.distributed as dist def train(rank, world_size): dist.init_process_group("nccl", rank=rank, world_size=world_size) model = MyModel().to(rank) model = nn.parallel.DistributedDataParallel(model, device_ids=[rank]) # 数据并行处理 sampler = torch.utils.data.distributed.DistributedSampler(dataset) loader = DataLoader(dataset, batch_size=64, sampler=sampler) for epoch in range(epochs): for batch in loader: # 训练逻辑... ``` 2. **GPU加速与内存优化** ```python # 混合精度训练 from torch.cuda.amp import autocast, GradScaler scaler = GradScaler() for inputs, targets in loader: inputs, targets = inputs.cuda(), targets.cuda() with autocast(): outputs = model(inputs) loss = criterion(outputs, targets) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() ``` #### **四、习程度评估标准** | 能力层级 | 掌握要求 | 对应AI任务 | |---------|---------|-----------| | **基础级** | 熟练使用列表推导式/生成器 | 数据预处理 | | **进阶级** | 自定义PyTorch模块/损失函数 | 模型微调 | | **高级级** | 分布式训练/混合精度优化 | 大模型训练 | | **专家级** | CUDA内核扩展/编译器优化 | 框架开发 | #### **五、习路线建议** ```mermaid graph TD A[Python基础] --> B[NumPy/Pandas] B --> C[PyTorch基础] C --> D[模型实现] D --> E[分布式训练] E --> F[大模型优化] F --> G[自定义算子开发] ``` #### **六、关键项目实践** 1. **从零实现Transformer** ```python class MultiHeadAttention(nn.Module): def __init__(self, d_model, num_heads): super().__init__() self.d_k = d_model // num_heads self.num_heads = num_heads self.q_linear = nn.Linear(d_model, d_model) self.k_linear = nn.Linear(d_model, d_model) self.v_linear = nn.Linear(d_model, d_model) def forward(self, q, k, v, mask=None): # 实现多头注意力机制... ``` 2. **大模型微调实战** ```python from transformers import AutoModelForCausalLM, Trainer model = AutoModelForCausalLM.from_pretrained("gpt2") trainer = Trainer( model=model, args=TrainingArguments(output_dir="./output"), train_dataset=train_dataset, ) trainer.train() ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值