📜  PyTorch-功能块的神经网络(1)

📅  最后修改于: 2023-12-03 15:04:42.858000             🧑  作者: Mango

PyTorch-功能块的神经网络

介绍

PyTorch是一个基于机器学习的开源库,主要用于替代NumPy支持GPU加速的张量计算。PyTorch同时也是一个构建神经网络的框架,其强大的autograd系统使得构建神经网络变得更加简单。在PyTorch中,神经网络是由一些层(layer)组成的,可以使用PyTorch中提供的功能块(building block)来构建这些层。

本文将介绍PyTorch中的功能块和如何使用这些功能块来构建神经网络。

PyTorch中的功能块

PyTorch中提供了很多常用的功能块来构建神经网络,这些功能块的使用方式和目的如下:

  • nn.Linear(in_features, out_features, bias=True): 线性层,接受二维张量(batch_size, n)作为输入,输出张量(batch_size, out_features)

  • nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros'): 二维卷积层,接受四维张量(batch_size, in_channels, height, width)作为输入,输出张量(batch_size, out_channels, height_out, width_out)

  • nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): 批归一化层,接受四维张量(batch_size, num_features, height, width)作为输入

  • nn.Dropout(p=0.5, inplace=False): 随机失活层,可用于防止网络过拟合

  • nn.ReLU(inplace=False): 非线性激活函数,接受任意张量作为输入

  • nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False): 最大池化层,接受四维张量(batch_size, channels, height, width)作为输入,输出张量(batch_size, channels, height_out, width_out)

构建神经网络

以下是一个使用PyTorch中提供的功能块构建卷积神经网络的示例:

import torch.nn as nn

class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        
        self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1)
        self.bn1 = nn.BatchNorm2d(32)
        self.relu1 = nn.ReLU(inplace=True)
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
        self.bn2 = nn.BatchNorm2d(64)
        self.relu2 = nn.ReLU(inplace=True)
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        
        self.fc1 = nn.Linear(64 * 7 * 7, 128)
        self.relu3 = nn.ReLU(inplace=True)
        self.dropout1 = nn.Dropout()
        
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu1(x)
        x = self.pool1(x)
        x = self.conv2(x)
        x = self.bn2(x)
        x = self.relu2(x)
        x = self.pool2(x)
        x = x.view(-1, 64 * 7 * 7)
        x = self.fc1(x)
        x = self.relu3(x)
        x = self.dropout1(x)
        x = self.fc2(x)
        return x

这个神经网络包含两个卷积层和两个全连接层。其中使用了nn.BatchNorm2dnn.Dropout等功能块来提高网络的训练效果。

总结

在PyTorch中,功能块是构建神经网络的基本单元。利用这些功能块,我们可以轻松地构建出各种类型的神经网络。同时,PyTorch还提供了完善的autograd系统,使得反向传播更加简单。