Pytorch学习笔记(1)
发布人:shili8
发布时间:2025-01-11 08:43
阅读次数:0
**PyTorch学习笔记(1)**
**前言**
PyTorch是目前最流行的深度学习框架之一,尤其是在研究和开发中。作为一个新手,我花了很多时间学习和实践PyTorch,希望通过这篇笔记分享我的经验和知识,让更多的人能够快速上手。
**环境准备**
首先,我们需要安装PyTorch和相关的依赖包。可以使用以下命令进行安装:
bashpip install torch torchvision
**基本概念**
### 张量(Tensor)
在PyTorch中,张量是最基本的数据结构。它可以看作是一个多维数组,可以包含数字、字符串等类型的数据。
import torch# 创建一个1x2的张量tensor = torch.tensor([[1,2], [3,4]]) print(tensor)
### 张量运算PyTorch提供了丰富的张量运算功能,包括加法、减法、乘法等基本运算,以及矩阵乘法、求和等高级运算。
import torch# 创建两个1x2的张量tensor1 = torch.tensor([[1,2], [3,4]]) tensor2 = torch.tensor([[5,6], [7,8]]) # 张量加法result = tensor1 + tensor2print(result) # 张量乘法result = tensor1 * tensor2print(result)
### autogradautograd是PyTorch中一个非常重要的模块,它负责自动计算张量的梯度。这个功能对于训练神经网络至关重要。
import torch# 创建一个1x2的张量tensor = torch.tensor([1,2], requires_grad=True) # 张量加法result = tensor +2# 计算结果的梯度result.backward() print(tensor.grad)
### ModuleModule是PyTorch中一个非常重要的类,它代表了一个神经网络模型。通过继承这个类,我们可以定义自己的神经网络结构。
import torch.nn as nnclass Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(5,3) self.fc2 = nn.Linear(3,2) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return xnet = Net() print(net)
### OptimizerOptimizer是PyTorch中一个非常重要的类,它负责更新神经网络模型的参数。通过继承这个类,我们可以定义自己的优化器。
import torch.optim as optimclass MyOptimizer(optim.Optimizer): def __init__(self, params, lr): super(MyOptimizer, self).__init__(params, lr) def step(self): for group in self.param_groups: for p in group['params']: if p.grad is None: continue grad = p.grad.data if grad.is_sparse: raise RuntimeError('sparse gradients are not supported') d_p = grad * group['lr'] p.data.add_(d_p, _stack_tensor([0.1,0.2])) optimizer = MyOptimizer(net.parameters(), lr=0.01) print(optimizer)
### DataLoaderDataLoader是PyTorch中一个非常重要的类,它负责加载数据集。通过继承这个类,我们可以定义自己的数据加载器。
import torch.utils.data as dataclass MyDataset(data.Dataset): def __init__(self, data, labels): self.data = data self.labels = labels def __getitem__(self, index): return self.data[index], self.labels[index] def __len__(self): return len(self.data) dataset = MyDataset([1,2,3], [4,5,6]) dataloader = data.DataLoader(dataset, batch_size=2) print(dataloader)
### TrainerTrainer是PyTorch中一个非常重要的类,它负责训练神经网络模型。通过继承这个类,我们可以定义自己的训练器。
import torch.optim as optimclass MyTrainer: def __init__(self, model, optimizer): self.model = model self.optimizer = optimizer def train(self, data_loader): for batch in data_loader: inputs, labels = batch outputs = self.model(inputs) loss = torch.nn.CrossEntropyLoss()(outputs, labels) self.optimizer.zero_grad() loss.backward() self.optimizer.step() trainer = MyTrainer(net, optimizer) print(trainer)
### EvaluationEvaluation是PyTorch中一个非常重要的模块,它负责评估神经网络模型的性能。通过使用这个模块,我们可以计算准确率、精度等指标。
import torch.nn as nnclass Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(5,3) self.fc2 = nn.Linear(3,2) def forward(self, x): x = torch.relu(self.fc1(x)) x = self.fc2(x) return xnet = Net() # 创建一个数据加载器dataset = MyDataset([1,2,3], [4,5,6]) dataloader = data.DataLoader(dataset, batch_size=2) # 创建一个评估器evaluator = nn.CrossEntropyLoss() trainer = MyTrainer(net, optimizer) # 进行评估for batch in dataloader: inputs, labels = batch outputs = net(inputs) loss = evaluator(outputs, labels) print(loss.item())
### VisualizationVisualization是PyTorch中一个非常重要的模块,它负责可视化神经网络模型的结构和性能。通过使用这个模块,我们可以绘制图表、散点图等。
import matplotlib.pyplot as plt# 创建一个数据加载器dataset = MyDataset([1,2,3], [4,5,6]) dataloader = data.DataLoader(dataset, batch_size=2) # 进行可视化for batch in dataloader: inputs, labels = batch plt.scatter(inputs.numpy(), labels.numpy()) plt.show()
**总结**
本文介绍了PyTorch的基本概念、张量运算、autograd、Module、Optimizer、DataLoader、Trainer等模块。通过这些模块,我们可以定义自己的神经网络模型并进行训练和评估。同时,通过使用Visualization模块,我们可以可视化神经网络模型的结构和性能。
**参考**
* PyTorch官方文档: PyTorch教程: />* PyTorch示例代码: