神经网络搭建 的 基本构架介绍(附代码)
参考教程B站up主我是土堆如有侵权或其他问题欢迎留言联系更正或删除。1. dir ( ) 与 help ( ) 函数 —— 学习时常用import torch # 打印 package 下的子分类 print(dir(torch)) print(dir(torch.cuda)) print(dir(torch.cuda.is_available)) # 打印 函数的使用方法 print(help(torch.cuda.is_available))2. 快捷键Tab — 缩进、Ctrl — 查看函数具体信息、Ctrl / — 注释3. GPU训练# 利用GPU训练神经网络提升训练速度远快于CPU import torch # 方法一针对 “神经网络模型” “损失函数” “数据训练集、验证集的值及其对应标签” 使用 GPU 训练 if torch.cuda.is_available(): model_name model_name.cuda() loss_fn loss_fn.cuda() zhi zhi.cuda() label label.cuda() # 方法二设置 “训练设备” Device torch.device(cuda) # 若电脑含多张显卡 # 指定训练设备为第一个cuda Device torch.device(cuda:0) # 指定训练设备为第二个cuda Device torch.device(cuda:1) Device torch.device(cpu) # 语法糖 Device torch.device(cuda if torch.cuda.is_available() else cpu) # 以下两种写法等价 model_name model_name.to(Device) model_name.to(Device) loss_fn loss_fn.to(Device) loss_fn.to(Device) # 注意训练集、验证集的值及其对应标签 仅能以该形式设置训练设备 zhi zhi.to(Device) label label.to(Device)4. pytorch 框架下的 “数据加载”两个实用类dataset ( ) 及 dataloader ( )torch.utils.data.DataLoader功能构建可迭代的数据装载器datasetDataset 类决定数据从哪读取及如何读取batchsize批大小num_works是否多进程读取数据shuffle每个 epoch 是否乱序drop_last当样本数不能被 batchsize 整除时是否舍弃最后一批数据对应代码DataLoader( dataset, batch_size1, shuffleFalse, samplerNone, batch_samplerNone, num_workers0, collate_fnNone, pin_memoryFalse, drop_lastFalse, timeout0, worker_init_fnNone, multiprocessing_contextNone)注Epoch Iteration BatchsizeEpoch:所有训练样本都已输入至模型内一次称为一个 EpochIteration一批 (一个Batch) 样本输入至模型内称为一个 Iteration输入一个 Batch / 经历一次 Iteration更新一次模型参数Batchsize批 (Batch) 大小决定一个 Epoch 有多少个 Iteration也即num (Iteration) num (train_data) / Batchsize5. nn.Module神经网络搭建 的 基本骨架import torch from torch import nn # container —— 神经网络的基础模板可修改其为更复杂的结构 # 继承父类 nn.Module class model_name (nn.Module): def __init__(self): super().__init__() # 前向传播input-神经网络的输入 def forward(self,input): output input 1 return output # 模型实例创建 module_1 model_name() # 创建一个张量作为模型的输入 x torch.tensor(2.) # 输出经神经网络处理后的结果 y module_1(x) print(y)6. 卷积操作理解“卷积” 操作内的 步幅 stride 及 外围填充 padding 的设置空洞卷积可增加 “感受野”设置 dilation 参数Q写出output_1、output_2、output_3的结果import torch import torch.nn.functional as F # 创建被卷积的 tensor外围有n个[] → n维tensor input torch.tensor([[1,2,0,3,1], [0,1,2,3,1], [1,2,1,0,0], [5,2,3,1,1], [2,1,0,1,1]]) # 创建卷积核 kernel torch.tensor([[1,2,1], [0,1,0], [2,1,0]]) # 变幻被卷积的 tensor 和卷积核的 shape input torch.reshape(input, (1,1,5,5)) kernel torch.reshape(kernel,(1,1,3,3)) output_1 F.conv2d(input,kernel,stride1) print(output_1) # 调整步幅 stridestride可以为数字或元组如tuple(1,2) —— 横向步幅1纵向步幅2 output_2 F.conv2d(input,kernel,stride2) print(output_2) # 用 “0” 填充 input 的外围一层padding可以为数字或元组 output_3 F.conv2d(input,kernel,stride2,padding1) print(output_3)7. 池化操作Q写出output 的结果若 ceil_modeFalseoutput 又将为何值import torch from torch import nn from torch.nn import MaxPool2d # 创建被池化的 tensor外围有n个[] → n维tensor input torch.tensor([[1, 2, 0, 3, 1], [0, 1, 2, 3, 1], [1, 2, 1, 0, 0], [5, 2, 3, 1, 1], [2, 1, 0, 1, 1]], dtypetorch.float32) # 定义含 “池化层” 的网络模型 class pool_net(nn.Module): def __init__(self): super(pool_net, self).__init__() # 定义 “池化核” 的大小注意默认情况下stride kernel_size self.pool_layer MaxPool2d(kernel_size3, ceil_modeTrue) def forward(self, input): output self.pool_layer(input) return output # 变幻被池化的 tensor input torch.reshape(input, (-1, 1, 5, 5)) # 将 input 置于定义好的池化网络内 model pool_net() output model(input) print(output)8. 常用的非线性激活函数引入非线性激活函数的目的旨在帮助网络学习数据中的复杂模式对所有隐藏层及输出层添加 “非线性” 的操作使得神经网络的输出更为复杂、表达能力更强注意绝大多数神经网络借助某形式的梯度下降进行参数优化故激活函数需要是可微分的或者至少是几乎完全可微分的9. 线性层全连接层概念各神经元都与上下层各神经元相连一个简单的 “线性层全连接层” 如下所示具体函数# in_features out_features输入出特征数bias偏置项默认为True torch.nn.Linear (in_features, out_features, biasTrue, deviceNone, dtypeNone)tiptorch.flatten ( ) 函数被用于 “拉平” 矩阵10. Drop - out 操作丢弃部分数据避免过拟合11. Sequential 的使用Q练习写出下列图示的网络结构使用 pytorch 框架代码如下1不使用 Sequential 时的解答import torch from torch import nn from torch.nn import Flatten # 搭建图示网络 class M (nn.Module): # 定义后续将使用的网络模块 def __init__ (self): super(M, self).__init__() self.conv_1 nn.Conv2d(3, 32, 5, padding2) self.pool_1 nn.MaxPool2d(2) self.conv_2 nn.Conv2d(32, 32, 5, padding2) self.pool_2 nn.MaxPool2d(2) self.conv_3 nn.Conv2d(32, 64, 5, padding2) self.pool_3 nn.MaxPool2d(2) self.flat Flatten() self.linear_1 nn.Linear(1024, 64) self.linear_2 nn.Linear(64, 10) # 定义前向传播 def forward(self, input): input self.conv_1(input) input self.pool_1(input) input self.conv_2(input) input self.pool_2(input) input self.conv_3(input) input self.pool_3(input) input self.flat(input) input self.linear_1(input) input self.linear_2(input) return input # 初始化上述定义的神经网络 m1 M() # 测试 q torch.ones((64,3,32,32)) t m1(q) print(t.shape) # 预计输出torch.Size([64, 10])2使用 Sequential 时的解答有助于简化网络搭建过程import torch from torch import nn from torch.nn import Flatten, Sequential # 搭建图示网络 class M (nn.Module): # 定义后续将使用的网络模块 def __init__ (self): super(M, self).__init__() # 使用 Sequential有助于简化网络搭建过程如下所示以此类推 self.model1 Sequential ( nn.Conv2d(3, 32, 5, padding2), nn.MaxPool2d(2), nn.Conv2d(32, 32, 5, padding2), nn.MaxPool2d(2), nn.Conv2d(32, 64, 5, padding2), nn.MaxPool2d(2), Flatten(), nn.Linear(1024, 64), nn.Linear(64, 10) ) # 定义前向传播 def forward(self, input): input self.model1(input) return input # 初始化上述定义的神经网络 m1 M() # 测试 q torch.ones((64,3,32,32)) t m1(q) print(t.shape)12. Pytorch 下现有模型 的 引入及使用import torch import torchvision from torch import nn # 以 VGG16 神经网络为例 # 不含预训练参数的网络结构 vgg16_False torchvision.models.vgg16(pretrained False) # 含有预训练参数的网络结构 vgg16_True torchvision.models.vgg16(pretrained True) # 向 pytorch 框架提供的神经网络添加模块进行结构修改 vgg16_False.add_module(linear_1,nn.Linear(1000,10))13. 模型的保存及加载方法一同时保存模型的网络结构 及 模型参数import torch import torchvision # method 1 # 以 torchvision 内的 vgg 模型为例 model_vgg torchvision.models.vgg16(pretrainedFalse) # 模型保存输入 待保存的模型 及 模型保存的路径名称 torch.save(model_vgg, vgg.path) # 模型加载注意若“保存”与“加载”不在同一python文件内则需import model_load torch.load(vgg.path) print(model_load)方法二仅保存模型参数占用内存更小import torch import torchvision # method 2 # 以 torchvision 内的 vgg 模型为例 model_vgg torchvision.models.vgg16(pretrainedFalse) # 模型保存输入 待保存的模型 及 模型保存的路径名称 torch.save(model_vgg.state_dict(), vgg.path) # 模型加载 vgg_16 torchvision.models.vgg16(pretrainedFalse) model_load vgg_16.load_state_dict(torch.load(vgg.path)) print(model_load)14. 损失函数 及 优化器注损失函数 “指导”网络参数的优化更新借助于“优化器”代码示例如下

相关新闻

Loop for Mac:3步告别混乱窗口,打造高效macOS工作流的终极指南

Loop for Mac:3步告别混乱窗口,打造高效macOS工作流的终极指南

Loop for Mac:3步告别混乱窗口,打造高效macOS工作流的终极指南 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否经常在十几个杂乱的窗口间迷失方向?每天花费宝贵…

2026/10/2 1:53:18 阅读更多 →
AI写小说长篇网文创作工具技术对比:从记忆系统、大纲到伏笔管理

AI写小说长篇网文创作工具技术对比:从记忆系统、大纲到伏笔管理

AI长篇网文创作工具技术对比:从记忆系统、大纲到伏笔管理 AI 写短篇已经不新鲜了。真正难啃的骨头是长篇——几十万字、上百个角色、纵横交错的伏笔。用 ChatGPT 或 Kimi 直接写,写到 30 章左右几乎必崩。本文从技术架构角度,对比 3 款试图解…

2026/10/7 8:57:04 阅读更多 →
AI写小说长篇创作中的上下文局限与外部记忆系统实践

AI写小说长篇创作中的上下文局限与外部记忆系统实践

简介: 本文从注意力衰减、检索盲区和时序冲突三个维度分析长上下文窗口在长篇AI创作中的结构性局限,并结合混合检索(BM25向量)、三层记忆压缩与时序衰减机制,探讨外部记忆系统的工程实现方法。文中以蛙趣拼文创作工作台…

2026/9/27 18:21:10 阅读更多 →

最新新闻

NIUSHOP V6开源商城实战:Spring Boot部署、分销配置与二次开发

NIUSHOP V6开源商城实战:Spring Boot部署、分销配置与二次开发

简介:这是一套基于 NIUSHOP V6 的企业级开源商城系统,面向需要快速搭建电商平台或开展二次开发的 PHP 开发者与企业技术团队,可解决从部署到业务定制的效率问题。系统整合商城、分销、VIPCard、上门服务等模块,采用 ThinkPHP8 PH…

2026/10/7 10:55:44 阅读更多 →
QQ、网易云、酷我、酷狗、咪咕全支持:lx-ikun-music-sources多平台FLAC音源横向实测对比

QQ、网易云、酷我、酷狗、咪咕全支持:lx-ikun-music-sources多平台FLAC音源横向实测对比

QQ、网易云、酷我、酷狗、咪咕全支持:lx-ikun-music-sources多平台FLAC音源横向实测对比 【免费下载链接】lx-ikun-music-sources LX_music & IKUN_music 音源收集 项目地址: https://gitcode.com/gh_mirrors/lx/lx-ikun-music-sources 这次对 lx-ikun-m…

2026/10/7 10:55:44 阅读更多 →
诸暨有没有承接电梯广告业务的服务商

诸暨有没有承接电梯广告业务的服务商

随着诸暨县域商业活力持续释放,政企公益宣传、地产项目推广、家居建材促销、教培机构招生、本地门店引流等各类宣传需求逐年上涨,电梯广告作为社区场景触达率最高的宣传渠道之一,凭借受众精准、曝光频次高、性价比突出等优势,成为…

2026/10/7 10:55:44 阅读更多 →
Altium Designer网络管理器:PCB后期GND/VCC批量优化实战

Altium Designer网络管理器:PCB后期GND/VCC批量优化实战

1. 为什么网络管理器是PCB后期优化的隐藏利器画过几块板子的人大概都有这种体会:原理图阶段网络命名随意,GND写成GND_1、GND_2,VCC分成VCC_3V3、VCC_5V、VCC_MAIN,等到PCB布局布线快收尾了,突然发现电源网络需要统一加…

2026/10/7 10:55:44 阅读更多 →
2026实力派!好用的降AI率平台实测,效率直接拉满!

2026实力派!好用的降AI率平台实测,效率直接拉满!

2026 年 AI 论文写作工具的综合王者是 千笔AI,国内毕业全流程首选千笔AI;千笔以中文润色 降重双能与全流程闭环见长,深度适配高校规范与查重系统,AI 率控制行业领先。按需求选对工具,论文效率可提升70%-90%&#xff0…

2026/10/7 10:55:44 阅读更多 →
硬件测试快速入门:信号完整性与实操避坑指南

硬件测试快速入门:信号完整性与实操避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 10:54:44 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 1:18:13 阅读更多 →