个性化阅读
专注于IT技术分析

PyTorch开发:深度神经网络的实现

在了解了反向传播的过程之后, 让我们开始看看如何使用PyTorch实现深度神经网络。实施深度神经网络的过程类似于感知器模型的实施。在实施过程中, 我们必须执行以下步骤。

步骤1:

第一步, 我们将导入所有必需的库, 例如PyTorch, numpy, 数据集和matplotlib.pyplot。

import torch
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

第2步:

在第二步中, 我们没有定义数据点, 然后使用make_blobs()函数创建数据集, 该函数将创建数据点的集群。

no_of_points=500
datasets.make_blobs()

第三步:

现在, 我们将创建数据集, 将数据点存储到变量x中, 而将值存储到变量y中, 我们将使用一下标签。

x, y=datasets.make_blobs()

步骤4:

现在, 我们将make_blobs()更改为make_cicrcle(), 因为我们希望数据集采用循环形式。我们在make_circle()函数中传递适当的参数。第一个参数代表样本点的数量, 第二个参数是随机状态, 第三个参数是噪声, 它是指高斯噪声的标准偏差, 第四个参数是因子, 它是指样本的相对大小。与较大的内部圆形区域相比, 较小的内部圆形区域。

x, y=datasets.make_circles(n_samples=no_of_points, random_state=123, noise=0.1, factor=0.2)=

步骤4:

现在, 根据需要自定义我们的数据集后, 我们可以使用plt.scatter()函数将其绘制并可视化。我们定义每个标签数据集的x和y坐标。让我们从标签为0的数据集开始。它绘制了数据的顶部区域。 0个标记数据集的散布函数定义为

plt.scatter(x[y==0, 0], x[y==0, 1])
深度神经网络的实现

步骤5:

现在, 我们在数据的下部绘制点。一个标记数据集的散点函数()定义为

plt.scatter(x[y==1, 0], x[y==1, 1])
深度神经网络的实现

单行无法对以上数据集进行分类。为了对该数据集进行分类, 将需要更深入的神经网络。

我们把plt.scatter(x [y == 0, 0], x [y == 0, 1])和plt.scatter(x [y == 1, 0], x [y == 1, 1] )转化为功能, 以进一步用作

def Scatter():
	plt.scatter(x[y==0, 0], x[y==0, 1])
	plt.scatter(x[y==1, 0], x[y==1, 1])

步骤6:

在此步骤中, 我们将创建我们在线性回归和感知器模型中实现的模型类。不同之处在于, 这里我们在输入和输出层之间也使用隐藏层。在init()方法中, 我们将传递一个附加参数h1作为隐藏层, 我们的输入层与隐藏层连接, 然后隐藏层与输出层连接。所以

class Deep_neural_network(nn.Module):
def __init__(self, input_size, h1, output_size):
        		super().__init__()
        		self.linear=nn.Linear(input_size, h1)   # input layer connect with hidden layer 
             self.linear1=nn.Linear(h1, output_size)   # hidden layer connect with output layer

现在, 我们必须在前向函数中添加此额外的隐藏层, 以便任何输入都必须通过神经网络的整个深度才能进行预测。所以

def forward(self, x):
	x=torch.sigmoid(self.linear(x))	# Return the prediction x 
	x=torch.sigmoid(self.linear1(x))	# Prediction will go through the next layer.
	return x				# Returning final outputs

我们的初始化已完成, 现在, 我们可以使用它了。请记住训练模型x, 并且y坐标都应为numpy数组。所以我们要做的是将x和y值更改为张量

xdata=torch.Tensor(x)
ydata=torch.Tensor(y)

步骤7

我们将使用Deep_neural_network()构造函数初始化一个新的线性模型, 并将input_size, output_size和hidden_​​size作为参数传递。现在, 我们打印分配给它的随机权重和偏差值, 如下所示:

print(list(model.parameters()))

在此之前, 为了确保随机结果的一致性, 我们可以使用手电筒手动种子为随机数生成器提供种子, 并可以按如下方式放入两个种子

torch.manual_seed(2)

步骤8:

交叉熵是我们用来计算模型误差的标准。我们的损失函数将基于二进制交叉熵损失(BCELoss)进行度量, 因为我们仅处理两个类别。它是从nn模块导入的。

criterion=nn.BCELoss()

现在, 我们的下一步是使用优化器更新参数。因此, 我们定义了使用梯度下降算法的优化器。在这里, 我们将使用Adam优化器。亚当优化器是众多优化算法之一。 Adam优化算法是随机梯度下降的两个其他扩展的组合, 例如Adagrad和RMSprop。学习率在优化中起着重要作用。

optimizer=torch.optim.Adam(model.parameters(), lr=0.01)

如果我们选择最低的学习率, 则会导致朝向最低值的收敛速度非常慢, 而如果你选择非常大的学习率, 则会阻碍收敛。 Adam优化器算法最终为每个参数计算自适应学习率。

步骤9:

现在, 我们将像在线性模型和感知器模型中所做的那样, 针对指定的纪元训练模型。因此, 代码将类似于感知器模型, 因为

epochs=1000
losses=[]
For i in range (epochs):
	ypred=model.forward(x)	#Prediction of y
	loss=criterion(ypred, y)   #Find loss
	losses.append()		# Add loss in list 
	optimizer.zero_grad() 	# Set the gradient to zero
	loss.backward()    #To compute derivatives 
	optimizer.step()    # Update the parameters
深度神经网络的实现

赞(0) 打赏
未经允许不得转载:srcmini » PyTorch开发:深度神经网络的实现
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏