PyTorch 如今已经称为最受欢迎的深度学习框架之一了!丰富的 PyTorch 教程,完备的 PyTorch 学习路线往往能帮助我们事半功倍!
今天给大家推荐一个比较完备的 PyTorch 资源列表,内容涉及 PyToch 基本知识,PyToch 在 CV、NLP 领域的应用,PyTorch 教程、PyTorch 相关论文等。
首先放上该项目地址:
https://github.com/bharathgs/Awesome-pytorch-list
该项目非常受欢迎,目前已经收获了 6000+ 的 stars 了。
资源列表:
- Pytorch & related libraries
- NLP & Speech Processing
-
Computer Vision
-
Probabilistic/Generative Libraries
-
Other libraries
-
Tutorials & examples
-
Paper implementations
-
Pytorch elsewhere
下面,我们来分别介绍这份 PyTorch 资源。
PyTorch & related libraries
这部分主要介绍了 PyTorch 及相关的库函数。
1. NLP & Speech Processing
这部分主要介绍 PyTorch 在自然语言处理 NLP 领域的应用及其相关资源,总共包含了 33 份资料。
涉及的内容包括:seq2seq, speech, quick-nlp 等。不仅包含了 PyToch 在 NLP 的快速入门,也包含了最新的 BERT 的 PyTorch 实现。
2. Computer Vision
这部分主要介绍 PyTorch 在计算机视觉 CV 领域的应用及其相关资源,总共包含了 18 份资料。
内容上涉及了近年来 CV 领域非常火热的研究,如经典的 LSTM 的 PyTorch 实现,流行的 face-alignment 等。
3. Probabilistic/Generative Libraries
这部分主要介绍 PyTorch 一些概率/生成库,总共包含了 8 份资料。
4. Other libraries
这部分主要介绍 PyTorch 其它的一些库,总共包含了 101 份资料,非常全面。
这部分可以当作字典来用,平时需要使用到 PyTorch 的一些其它相关库,可在这里查询。
Tutorials & examples
这部分是硬核内容,专门讲了 PyTorch 额详细教程并配备相关的实例。总共包含了 58 份资源。
例如 pytorch-tutorial,这里获星 10k+。从 PyTorch 的基础语法知识、张量介绍起,然后是简单的实例、进阶实例等。整个教程学习梯度清晰,难易程度适中,便于进阶提升。
下面是使用 PyTorch 实现一个线性回归的简单例子:
import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt # Hyper-parameters input_size = 1 output_size = 1 num_epochs = 60 learning_rate = 0.001 # Toy dataset x_train = np.array([[3.3], [4.4], [5.5], [6.71], [6.93], [4.168], [9.779], [6.182], [7.59], [2.167], [7.042], [10.791], [5.313], [7.997], [3.1]], dtype=np.float32) y_train = np.array([[1.7], [2.76], [2.09], [3.19], [1.694], [1.573], [3.366], [2.596], [2.53], [1.221], [2.827], [3.465], [1.65], [2.904], [1.3]], dtype=np.float32) # Linear regression model model = nn.Linear(input_size, output_size) # Loss and optimizer criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate) # Train the model for epoch in range(num_epochs): # Convert numpy arrays to torch tensors inputs = torch.from_numpy(x_train) targets = torch.from_numpy(y_train) # Forward pass outputs = model(inputs) loss = criterion(outputs, targets) # Backward and optimize optimizer.zero_grad() loss.backward() optimizer.step() if (epoch+1) % 5 == 0: print ('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item())) # Plot the graph predicted = model(torch.from_numpy(x_train)).detach().numpy() plt.plot(x_train, y_train, 'ro', label='Original data') plt.plot(x_train, predicted, label='Fitted line') plt.legend() plt.show() # Save the model checkpoint torch.save(model.state_dict(), 'model.ckpt')
下面是使用 PyTorch 实现一个 CNN 模型的稍复杂例子:
import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms # Device configuration device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') # Hyper parameters num_epochs = 5 num_classes = 10 batch_size = 100 learning_rate = 0.001 # MNIST dataset train_dataset = torchvision.datasets.MNIST(root='../../data/', train=True, transform=transforms.ToTensor(), download=True) test_dataset = torchvision.datasets.MNIST(root='../../data/', train=False, transform=transforms.ToTensor()) # Data loader train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # Convolutional neural network (two convolutional layers) class ConvNet(nn.Module): def __init__(self, num_classes=10): super(ConvNet, self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2), nn.BatchNorm2d(16), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2)) self.layer2 = nn.Sequential( nn.Conv2d(16, 32, kernel_size=5, stride=1, padding=2), nn.BatchNorm2d(32), nn.ReLU(), nn.MaxPool2d(kernel_size=2, stride=2)) self.fc = nn.Linear(7*7*32, num_classes) def forward(self, x): out = self.layer1(x) out = self.layer2(out) out = out.reshape(out.size(0), -1) out = self.fc(out) return out model = ConvNet(num_classes).to(device) # Loss and optimizer criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) # Train the model total_step = len(train_loader) for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): images = images.to(device) labels = labels.to(device) # Forward pass outputs = model(images) loss = criterion(outputs, labels) # Backward and optimize optimizer.zero_grad() loss.backward() optimizer.step() if (i+1) % 100 == 0: print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, i+1, total_step, loss.item())) # Test the model model.eval() # eval mode (batchnorm uses moving mean/variance instead of mini-batch mean/variance) with torch.no_grad(): correct = 0 total = 0 for images, labels in test_loader: images = images.to(device) labels = labels.to(device) outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Test Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total)) # Save the model checkpoint torch.save(model.state_dict(), 'model.ckpt')
Paper implementations
这部分的内容很难得,主要收集了使用 PyTorch 实现的各种深度学习相关论文,节约了大家收集、查找论文的时间。这部分总共包含了 316 份资源。
例如有趣的 BigGAN-PyTorch,论文地址:
https://arxiv.org/abs/1809.11096
Pytorch elsewhere
这部分资源主要收集了关于 PyTorch 的其它内容,总共包含了 35 份资料。
最后,希望这份资源对你有所帮助!