python常见八股文系列

1、进程、线程与协程

1.1 GIL锁原理

1.2 多线程是否安全

1.3 进程、线程、协程区别

1.4 如何实现协程

2、迭代器 与 生成器

2.1 迭代器定义

2.2 生成器定义

2.3 生成器优点

3、装饰器

3.1 如何实现装饰器

4、django相关

4.1 django生命周期

4.2 MTV模型

5、一些记录

5.1 百鸡百钱

至多两次for循环

百鸡百钱问题:公鸡每只5元,母鸡每只1元,小鸡0.5只一元,现要求用100元钱买100只鸡,问公鸡、母鸡、小鸡各买几只?
公鸡:i 母鸡:j 小鸡: k

count = 0
# 遍历公鸡数
for i in range(101):
    # 遍历母鸡
    for j in range(101):
        # 遍历小鸡
        k = 100 - i - j
        if k >= 0 and 2 * i + 1 * j + 0.5 * k == 100:
            count += 1
print(count)
### PyTorch 常见面试问题及答案 #### 1. **什么是张量(Tensor),它与 NumPy 数组有什么区别?** 张量是 PyTorch 中的核心数据结构,类似于 NumPy 的数组,但它支持 GPU 加速计算[^4]。主要区别在于: - 张量可以在 CPU 和 GPU 上运行,而 NumPy 数组仅限于 CPU。 - 张量提供了更高效的数值计算能力。 ```python import torch tensor = torch.tensor([1, 2, 3]) print(tensor) ``` --- #### 2. **如何定义一个简单的神经网络模型?** 可以通过继承 `torch.nn.Module` 类并实现其 `forward` 方法来定义一个神经网络模型: ```python import torch import torch.nn as nn class SimpleNet(nn.Module): def __init__(self): super(SimpleNet, self).__init__() self.fc = nn.Linear(10, 1) def forward(self, x): return torch.sigmoid(self.fc(x)) model = SimpleNet() print(model) ``` 上述代码定义了一个单层全连接神经网络,并使用 Sigmoid 函数作为激活函数。 --- #### 3. **PyTorch 中的自动求导机制是什么?** PyTorch 提供了强大的自动求导功能,通过跟踪操作记录梯度计算图。当调用 `.backward()` 方法时,会自动生成梯度。 ```python x = torch.tensor(2.0, requires_grad=True) y = x ** 2 + 3 * x + 1 y.backward() # 计算 y 关于 x 的梯度 print(x.grad) # 输出梯度值 ``` --- #### 4. **如何保存和加载模型?** 可以使用 `torch.save` 和 `torch.load` 来保存和加载模型参数或整个模型。 ```python # 保存模型参数 torch.save(model.state_dict(), 'model.pth') # 加载模型参数 new_model = SimpleNet() new_model.load_state_dict(torch.load('model.pth')) ``` --- #### 5. **什么是损失函数?常用的损失函数有哪些?** 损失函数用于衡量预测值与真实值之间的差距。常见的损失函数包括: - MSE Loss (`nn.MSELoss`):均方误差损失,适用于回归问题。 - CrossEntropyLoss (`nn.CrossEntropyLoss`):交叉熵损失,常用于分类问题。 ```python criterion = nn.MSELoss() output = model(input_data) loss = criterion(output, target_data) ``` --- #### 6. **优化器的作用是什么?常用优化器有哪些?** 优化器负责调整模型参数以最小化损失函数。常用的优化器有: - SGD (`torch.optim.SGD`):随机梯度下降。 - Adam (`torch.optim.Adam`):一种自适应学习率方法。 ```python optimizer = torch.optim.Adam(model.parameters(), lr=0.001) optimizer.zero_grad() # 清零梯度 loss.backward() # 反向传播 optimizer.step() # 更新参数 ``` --- #### 7. **如何处理过拟合?** 防止过拟合的方法包括但不限于: - 使用正则化技术(如 L1/L2 正则化)。 - 添加 Dropout 层减少神经元间的依赖性。 ```python dropout_layer = nn.Dropout(p=0.5) ``` --- #### 8. **PyTorch 数据加载流程是什么样的?** 通常使用 `torch.utils.data.Dataset` 定义数据集,并通过 `DataLoader` 进行批量加载。 ```python from torch.utils.data import Dataset, DataLoader class CustomDataset(Dataset): def __getitem__(self, index): pass def __len__(self): pass dataset = CustomDataset() dataloader = DataLoader(dataset, batch_size=32, shuffle=True) ``` --- #### 9. **如何检查线性层的输出是否符合预期?** 可以通过打印输出张量的形状验证其大小是否匹配 `(batch_size, output_size)`。 ```python linear_layer = nn.Linear(in_features=100, out_features=10) input_tensor = torch.randn(32, 100) output_tensor = linear_layer(input_tensor) assert output_tensor.shape == (32, 10), "Output shape mismatch" ``` --- #### 10. **PyTorch 支持哪些设备加速?** PyTorch 支持多种硬件加速方式,最常见的是利用 CUDA 实现 GPU 并行计算。 ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) input_data = input_data.to(device) ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值