当前位置: 首页 > 科技观察

Pytorch中的NN模块,实现第一个神经网络模型

时间:2023-03-13 02:12:24 科技观察

在PyTorch中搭建模型,主要是NN模块。nn.Linearnn.Linear创建一个线性层。这里需要将输入和输出维度作为参数传递。linear=nn.Linear(10,2)example_input=torch.randn(3,10)example_output=linear(example_input)example_output上面的代码linear接受nx10输入并返回nx2输出。打印(示例输入)打印(示例输出)张量([[1.1122,-0.1381,0.5547,-0.3326,-0.5676,0.2810,-0.5521,-0.8729,-0.6627,0.8729],[1.9134,0.2397,-0.8340,25,1.60.6171,-0.0357,-1.6848,-0.8454,0.3876],[-0.0786,-0.1541,-0.8385,-0.1587,-0.0121,1.4457,-0.0132,1.5653,-1.6954,-0.9350])#输出如下]]tensor([[-0.1249,-0.8002],[-1.0945,-0.2297],[-0.3558,0.8439]],grad_fn=)nn.Relunn.Relu对给定的线性输出进行relu激活函数运算。relu=nn.ReLU()relu_output=relu(example_output)relu_output#输出如下tensor([[0.0000,0.0000],[0.0000,0.0000],[0.0000,0.8439]],grad_fn=)nn.BatchNorm1dnn.BatchNorm1d是一种标准化技术,用于在不同批次的输入中保持一致的均值和标准差。batchnorm=nn.BatchNorm1d(2)batchnorm_output=batchnorm(relu_output)batchnorm_output#输出如下tensor([[0.0000,-0.7071],[0.0000,-0.7071],[0.0000,1.4142]],grad_fn=)嗯。Sequentialnn.Sequential一次性创建一系列操作。和tensorflow中的Sequential完全一样。mlp_layer=nn.Sequential(nn.Linear(5,2),nn.BatchNorm1d(2),nn.ReLU())test_example=torch.randn(5,5)+1print("输入:")print(test_example)print("output:")print(mlp_layer(test_example))#输出如下input:tensor([[1.4617,1.2446,1.4919,1.5978,-0.3410],[-0.2819,0.5567,1.0113,1.8053,-0.0833],[0.2830,1.0857,1.2258,2.6602,0.1339],[0.8682,0.9344,1.3715,0.0279,1.8011],[0.6172,1.1414,0.6030,0.3876,1.3653,1.3653]0,0,0张量]])输出[[0,0001.3722],[0.0000,0.8861],[1.0895,0.0000],[1.3047,0.0000]],grad_fn=)上述模型中缺少优化器,我们无法得到相应的损失。importtorch.optimasoptimadam_opt=optim.Adam(mlp_layer.parameters(),lr=1e-1)#这里lr表示学习率,1e-1表示0.1train_example=torch.randn(100,5)+1adam_opt.zero_grad()#We将使用1减去均值作为简单的损失函数cur_loss=torch.abs(1-mlp_layer(train_example)).mean()cur_loss.backward()#更新参数adam_opt.step()print(cur_loss.data)#Output下面的张量(0.7467)虽然上面只用了一个epoch,但是训练线性模型的loss是0.7467。以上就是NN模型搭建模型的全过程。第一个神经网络模型实现了第一个分类神经网络,其中一个隐藏层用于开发单个输出单元。首先,使用以下命令导入PyTorch库-importtorchiimporttorch.nnasnn定义所有层和批量大小以开始执行神经网络,如下所示-n_in,n_h,n_out,batch_size=10,5,1,10由于神经网络包括输入数据要得到相应的输出数据,我们将遵循相同的程序-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]])创建顺序模型。使用以下代码创建具有梯度下降优化器的顺序模型-model=nn.Sequential(nn.Linear(n_in,n_h),nn.ReLU(),nn.Linear(n_h,n_out),nn.Sigmoid())构造损失函数如下-#constructlossfunctioncriterion=torch.nn.MSELoss()#constructoptimizeroptimizer=torch.optim.SGD(model.parameters(),lr=0.01)使用给定代码行的迭代Loop实现梯度下降模型——#gradientdescentforepochinrange(50):#forwardpass:计算预测的yy_pred=model(x),将x传给模型#calculatelossloss=criterion(y_pred,y)#gradientclear0optimizer。zero_grad()#反向传播,求解梯度loss.backward()#更新模型参数optimizer.step()ifepoch%10==0:print('epoch:',epoch,'loss:',loss.item())输出如下epoch:0loss:0.2508794665336609epoch:10loss:0.24847669899463654epoch:20loss:0.24615907669067383epoch:30loss:0.24392127990722656epoch:40loss:0.24175791442394257【编辑推荐】热搜第一!BstationuphostusesAItomakeLiDazhao,ChenYannianandothers微笑,互联网工作者必看!如何形象地解释IP地址、子网掩码和网关?MicrosoftWindows11在关机和重启时添加了“更新时间”。估计Windows11没有IE浏览器。下面教大家如何在Edge中打开IE模式。Windows11预览版突然来了!海量大图带你看Windows11