PyTorch 包含创建和实现神经网络的特殊功能。在本节实验中,将创建一个简单的神经网络,其中一个隐藏层开发一个输出单元。
通过以下步骤使用 PyTorch 实现第一个神经网络。
第1步
首先,需要使用以下命令导入 PyTorch 库。
In [1]:
import torch
import torch.nn as nn
第2步
定义所有层和批量大小以开始执行神经网络,如下所示。
In [2]:
# Defining input size, hidden layer size, output size and batch size respectively
n_in, n_h, n_out, batch_size = 10, 5, 1, 10
第3步
由于神经网络包含输入数据的组合以获取相应的输出数据,将遵循以下相同的程序。
In [3]:
# Create dummy input and target tensors (data)
x = torch.randn(batch_size, n_in)
y = torch.tensor([[1.0], [0.0], [0.0],
[1.0], [1.0], [1.0], [0.0], [0.0], [1.0], [1.0]])
第4步
借助内置函数创建顺序模型。使用下面的代码行,创建一个顺序模型。
In [4]:
# Create a model
model = nn.Sequential(nn.Linear(n_in, n_h),
nn.ReLU(),
nn.Linear(n_h, n_out),
nn.Sigmoid())
第5步
在梯度下降优化器的帮助下构造损失函数,如下所示。
In [5]:
#Construct the loss function
criterion = torch.nn.MSELoss()
# Construct the optimizer (Stochastic Gradient Descent in this case)
optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)
第6步
使用给定的代码行使用迭代循环实现梯度下降模型。
In [6]:
# Gradient Descent
for epoch in range(50):
# Forward pass: Compute predicted y by passing x to the model
y_pred = model(x)
# Compute and print loss
loss = criterion(y_pred, y)
print('epoch: ', epoch,' loss: ', loss.item())
# Zero gradients, perform a backward pass, and update the weights.
optimizer.zero_grad()
# perform a backward pass (backpropagation)
loss.backward()
# Update the parameters
optimizer.step()
epoch: 0 loss: 0.26868727803230286
epoch: 1 loss: 0.2684982419013977
epoch: 2 loss: 0.2683093845844269
epoch: 3 loss: 0.2681207060813904
epoch: 4 loss: 0.267932265996933
epoch: 5 loss: 0.2677440345287323
epoch: 6 loss: 0.26755601167678833
epoch: 7 loss: 0.2673681080341339
epoch: 8 loss: 0.267180472612381
epoch: 9 loss: 0.2669930160045624
epoch: 10 loss: 0.2668057382106781
epoch: 11 loss: 0.2666186988353729
epoch: 12 loss: 0.2664318084716797
epoch: 13 loss: 0.2662450969219208
epoch: 14 loss: 0.2660585939884186
epoch: 15 loss: 0.2658722996711731
epoch: 16 loss: 0.2656860947608948
epoch: 17 loss: 0.26550015807151794
epoch: 18 loss: 0.26531440019607544
epoch: 19 loss: 0.2651287913322449
epoch: 20 loss: 0.264943391084671
epoch: 21 loss: 0.2647581398487091
epoch: 22 loss: 0.26457303762435913
epoch: 23 loss: 0.26438820362091064
epoch: 24 loss: 0.2642034590244293
epoch: 25 loss: 0.2640189528465271
epoch: 26 loss: 0.26383453607559204
epoch: 27 loss: 0.2636503577232361
epoch: 28 loss: 0.2634662687778473
epoch: 29 loss: 0.26329419016838074
epoch: 30 loss: 0.2631300091743469
epoch: 31 loss: 0.2629658579826355
epoch: 32 loss: 0.2628018260002136
epoch: 33 loss: 0.2626378536224365
epoch: 34 loss: 0.262474000453949
epoch: 35 loss: 0.2623102366924286
epoch: 36 loss: 0.26214656233787537
epoch: 37 loss: 0.2619829773902893
epoch: 38 loss: 0.2618195414543152
epoch: 39 loss: 0.26165610551834106
epoch: 40 loss: 0.2614927887916565
epoch: 41 loss: 0.2613295316696167
epoch: 42 loss: 0.26116639375686646
epoch: 43 loss: 0.2610033452510834
epoch: 44 loss: 0.26084035634994507
epoch: 45 loss: 0.2606774866580963
epoch: 46 loss: 0.26051464676856995
epoch: 47 loss: 0.2603519558906555
epoch: 48 loss: 0.2601892650127411
epoch: 49 loss: 0.2600266933441162
5. 神经网络到功能块
训练深度学习算法涉及以下步骤:
- 构建数据管道
- 构建网络架构
- 使用损失函数评估架构
- 使用优化算法优化网络架构权重
训练特定的深度学习算法是将神经网络转换为功能块的确切要求,如下所示。
关于上图,任何深度学习算法都涉及获取输入数据,构建各自的架构,其中包括嵌入其中的一堆层。
观察上图,使用损失函数对神经网络权重的优化进行评估。