如何使用PyTorch搭建一个基础的神经网络并进行训练?

神经网络作为人工智能的重要组成部分,在图像处理、自然语言处理、语音识别、机器翻译等领域具有广泛的应用。今天的分享就来详细的介绍如何搭建一个简单的神经网络框架并进行训练。

首先定义一个名为NeuralNetwork的类,它继承了PyTorch框架的nn.Module类,用于创建神经网络。接下来部分是类的构造函数__init__(),用于初始化神经网络的各个层。在这个类中,初始化了以下层:

  • flatten:一个将输入展平的层。
  • hidden1:第一个隐藏层,输入大小为28x28(图像大小),输出大小为128。
  • hidden2:第二个隐藏层,输入大小为128,输出大小为128。
  • hidden3:第三个隐藏层,输入大小为128,输出大小为64。
  • out:输出层,输入大小为64,输出大小为10(类别数)。

    定义一个名为NeuralNetwork的类,它继承了PyTorch框架的nn.Module类,用于创建神经网络。classNeuralNetwork(nn.Module):def__init__(self):# 继承父类nn.Module的方法和属性super(NeuralNetwork, self).init()# 数据进行展平操作self.flatten=nn.Flatten()# 定义一层线性神经网络self.hidden1=nn.Linear(28*28,128)self.hidden2=nn.Linear(128,128)self.hidden3=nn.Linear(128,64)self.out=nn.Linear(64,10)

另外想自学机器学习深度学习,不知道如何入门的同学,还为大家整理了一份入门路线图(更新迭代不下10次),包含基础、理论、代码、实战项目、必读论文等等,希望可以帮到大家,大家可以添加小助手无偿自取****

这部分定义了前向传播方法forward(),通过前向传播计算输入数据x的输出。首先输入的数据先通过flatten层展平,然后依次经过隐藏层和激活函数进行线性变换和非线性处理。最后经过输出层输出预测结果x。(注意这个函数也是定义在NeuralNetwork之中的。)

复制代码
defforward(self,x):        # 对输入数据进行展平操作x=self.flatten(x)        # 将数据传入第一层线性神经网络x=self.hidden1(x)        # 对神经网络的输出应用ReLU激活函数x=torch.relu(x)x=self.hidden2(x)        # 对神经网络的输出应用sigmoid激活函数x=torch.sigmoid(x)x=self.hidden3(x)x=torch.relu(x)        # 将数据传入输出层x=self.out(x)        # 最后经过输出层输出预测结果xreturnx

这行代码创建了一个model的神经网络模型实例,并将其移动到特定的设备(我这里使用的是GPU)上进行计算。

复制代码
model=NeuralNetwork().to(device)

这行代码创建了一个CrossEntropyLoss(交叉熵损失函数)的实例,用作损失函数。​​​​​​​

复制代码
#交叉熵损失函数loss_fn=nn.CrossEntropyLoss()这行代码创建了一个Adam优化器的实例,将模型参数和学习率作为参数传入。​​​​​​​

# model.parameters()用于获取模型的所有参数。这些参数包括权重和偏差等# 它们都是Tensor类型的,是神经网络的重要组成部分optimizer=torch.optim.Adam(model.parameters(),lr=0.005)

这行代码定义了一个名为train的函数,用于进行训练。函数接受训练数据、模型、损失函数和优化器作为输入参数。​​​​​​​

复制代码
'''定义训练函数'''deftrain(dataloader,model,loss_fn,optimizer):# 设置模型为训练模式    model.train()# 记录优化次数    num=1# 遍历数据加载器中的每一个数据批次。for X,y in dataloader:        X,y=X.to(device),y.to(device)# 自动初始化权值w        pred=model.forward(X)        loss=loss_fn(pred,y) # 计算损失值# 将优化器的梯度缓存清零        optimizer.zero_grad()# 执行反向传播计算梯度        loss.backward()# 并通过优化器更新模型参数        optimizer.step()# 将损失值转换为标量        loss_value=loss.item()#将此次损失值打印出来        print(f'loss:{loss_value},[numbes]:{num}')#增加计数器num        num+=1

这行代码调用train函数来开始模型的训练。它传入训练数据、模型、损失函数和优化器,并执行训练过程。(注意训练前要先获取dataloader!)​​​​​​​

复制代码
#调用函数train(),传入训练数据,神经网络模型,损失函数和优化算法train(train_dataloader,model,loss_fn,optimizer)

完整代码展示:​​​​​​​

复制代码
'''定义神经网络'''classNeuralNetwork(nn.Module):def__init__(self):        super(NeuralNetwork, self).__init__()        self.flatten=nn.Flatten()        self.hidden1=nn.Linear(28*28,128)        self.hidden2=nn.Linear(128,128)        self.hidden3=nn.Linear(128,64)        self.out=nn.Linear(64,10)defforward(self,x):        x=self.flatten(x)        x=self.hidden1(x)        x=torch.relu(x)        x=self.hidden2(x)        x=torch.sigmoid(x)        x=self.hidden3(x)        x=torch.relu(x)        x=self.out(x)return xmodel=NeuralNetwork().to(device)print(model)'''建立损失函数和优化算法'''#交叉熵损失函数loss_fn=nn.CrossEntropyLoss()# 优化算法为随机梯度算法/Adam优化算法optimizer=torch.optim.Adam(model.parameters(),lr=0.005)'''定义训练函数'''deftrain(dataloader,model,loss_fn,optimizer):    model.train()# 记录优化次数    num=1for X,y in dataloader:        X,y=X.to(device),y.to(device)# 自动初始化权值w        pred=model.forward(X)        loss=loss_fn(pred,y) # 计算损失值        optimizer.zero_grad()        loss.backward()        optimizer.step()        loss_value=loss.item()        print(f'loss:{loss_value},[numbes]:{num}')        num+=1train(train_dataloader,model,loss_fn,optimizer)
相关推荐
咕泡科技几秒前
AI 前沿速递:OpenAI 开源 Codex 重构编程生态,人形机器人破纪录、迈入消费量产时代!
人工智能·机器人·开源·wrc2026·人形机器人运动会·启元机器人·辉羲智能
熊猫_豆豆3 分钟前
黑洞的粒子产生(霍金1975年论文)第二部分
人工智能·数学·算法·机器学习·量子力学·大学物理·黑洞
jay神6 分钟前
本科深度学习需要从零开始训练模型吗?
人工智能·深度学习·算法·机器学习·计算机视觉
智恒百亿7 分钟前
5090八卡算力服务器的技术架构与AI应用场景分析
服务器·人工智能·架构
渡我白衣7 分钟前
Acceptor模块的设计与实现
java·linux·服务器·开发语言·网络·c++·人工智能
Scott9999HH9 分钟前
2026 年大模型 RAG 架构与多 Agent 协同下的 AI 搜索流量重构:企业级 GEO 技术底层与深度工程解析
人工智能·重构·架构
机器学习之心9 分钟前
LSTM神经网络+SHAP可解释性分析+NSGA-II工艺参数优化,从预测到可解释性再到多目标优化的全流程实战,MATLAB代码
神经网络·matlab·lstm·shap可解释性分析·nsga-ii工艺参数优化
练习两年半的攻城狮10 分钟前
RAG 系统中 Excel/表格数据的正确处理方式
python·llamaindex
2601_9609067211 分钟前
Anthropic把Claude Code 2.1.236及以上版本的Fable 5会话
人工智能·kafka·时序数据库·etcd·tdengine