深度学习入门:手把手搭建简单神经网络
深度学习入门:手把手搭建简单神经网络(含代码详解+报错避坑)
一、前言
很多刚入门深度学习的同学,第一次写神经网络代码,都会遇到各种各样的问题:模型属性报错、维度不匹配、损失函数乱用、device非法、张量类型报错等。
本文将从神经网络核心原理、PyTorch模型搭建、前向传播、损失函数选择、实战代码、全网最详细报错解析全套讲解,适合零基础入门、作业实训、CSDN发文学习。
读完本文你将掌握:
- 简单全连接神经网络的结构原理
- PyTorch 标准模型类的搭建规范
- Sigmoid、ReLU、Softmax 激活函数适用场景
- 单标签分类损失函数 CrossEntropyLoss 正确用法
- 新手90%都会踩的神经网络报错坑与解决方案
二、神经网络核心原理
1. 什么是全连接神经网络
全连接神经网络(FC层/Linear层)是深度学习最基础的网络结构:上一层的每一个神经元,和下一层所有神经元全部相连。
作用:对输入特征进行特征变换、特征提取、维度映射。
2. 网络训练核心流程
深度学习训练永远只有四步:
- 前向传播:输入数据 → 网络计算 → 输出预测概率
- 计算损失:对比预测值和真实标签的差距
- 反向传播:根据损失计算梯度
- 参数更新:优化器更新权重,降低损失
3. 激活函数作用
- Sigmoid:将数据压缩到 0~1,适合概率映射
- ReLU:最常用激活,解决梯度消失,加速收敛
- Softmax:多分类专用,输出所有类别概率之和为1
三、任务场景说明
本文搭建一个3输入、2输出的单标签多分类神经网络:
- 输入特征:3维特征
- 隐藏层:两层全连接+激活函数
- 输出:2个类别概率(二分类/多分类通用)
- 任务:单标签分类(一个样本只属于一个类别)
四、完整可运行代码
import torch
import torch.nn as nn
from torchsummary import summary
搭建神经网络模型
class Model(nn.Module):
def init(self):
super().init()
三层全连接网络
self.linear1 = nn.Linear(3, 3)
self.linear2 = nn.Linear(3, 2)
self.out = nn.Linear(2, 2)
前向传播
def forward(self, x):
x = self.linear1(x)
x = torch.sigmoid(x)
x = self.linear2(x)
x = torch.relu(x)
logits = self.out(x)
多分类输出概率
out = torch.softmax(logits, dim=-1)
return out
if name == ‘main’:
实例化模型
model = Model()
随机构造5组3维输入数据
x = torch.randn(5, 3)
前向传播预测
out = model(x)
print(f"模型预测输出:\n{out}")
打印网络结构
summary(model, input_size=(3,), batch_size=10, device="cpu")
查看网络参数
print("\n==========网络参数详情==========")
for name, params in model.named_parameters():
print(f"{name} : {params}")
五、代码逐行详解
1. 导入模块
- torch:深度学习核心库
- nn:网络层、激活函数、损失函数工具库
- summary:打印网络结构、参数量
2. 模型类搭建规范
所有神经网络必须继承 nn.Module,固定两个函数:
- init:定义网络层(必须加self!)
- forward:定义数据传播逻辑
3. 网络层结构
- nn.Linear(3,3):3输入→3输出全连接层
- nn.Linear(3,2):3特征→2特征降维
- nn.Linear(2,2):输出层,对应2个分类
4. 前向传播逻辑
- 第一层 + Sigmoid 做特征压缩
- 第二层 + ReLU 增强非线性拟合能力
- 最后一层输出 logits,Softmax 转概率
六、关键知识点:损失函数怎么选?
1. 单标签多分类
必须用 CrossEntropyLoss
特点:
- 输入为模型原始 logits(不要提前softmax)
- 标签为 Long 类型类别索引(0、1、2…)
- 内部自带 log_softmax + NLLLoss,数值更稳定
2. 多标签二分类
使用 BCEWithLogitsLoss
标签只能是 0/1,不能是类别索引。
3. 避坑重点
如果代码结尾手动写了 softmax,训练时一定要删掉,否则会双重归一化,损失不收敛!
七、新手高频报错汇总)
报错1:‘NoneType’ object has no attribute ‘linear1’
原因:拼写错误 seif 而非 self,网络层没有绑定到模型实例。
解决:所有网络层必须写 self.xxx。
报错2:Input device is not valid, please specify ‘cuda’ or ‘cpu’
原因:device=’ cpu’ 多了空格。
解决:改为 device=“cpu”。
报错3:log_softmax_lastdim_kernel_impl not implemented for ‘Long’
原因:模型输出被强行转成 long 整数类型。
解决:预测输出必须是 float,标签必须是 long。
报错4:模块导入错误
错误写法:from sympy.printing.pytorch import torch
正确写法:import torch
八、总结
- 基础全连接神经网络由Linear全连接层 + 激活函数 堆叠而成,是深度学习的基石。
- 单标签多分类固定搭配:输出logits + CrossEntropyLoss。
- 新手90%报错都是:self拼写错误、维度不匹配、数据类型错乱、导入错误、device空格。
- 网络搭建核心规范:__init__定义层,forward写传播逻辑。
更多推荐

所有评论(0)