深度学习新手用pytorch从头构建神经网络!

PyTorch深度学习实战(3)——使用PyTorch构建神经网络 PyTorch 是一个用于构建深度神经网络的库,具有灵活性和可扩展性,可以轻松自定义模型。在本节中,我们将使用 PyTorch 库构建神经网络,利用张量对象操作和梯度值计算更新网络权重,并利用 Sequential 类简化网络构建过程,最后还介绍了如何使用 save、load 方法保存和加载模型,以节省模型训练时间。 阅读详情

本文旨在使用PyTorch构建并训练一个最简单的神经网络,无需添加任何花哨的层或依赖包。

该模型将足够简单,大家都能使用CPU或GPU来构建和训练。

这个模型虽然简单,但包含了当前诸如LLM和Stable Diffusions等大型模型所拥有的所有基本元素。

 构建一个模型,帮助我们彻底理解训练AI模型的过程,开始前请确保已安装并配置好PyTorch。

另外为了让大家可以更系统的学习人工智能(机器学习、深度学习、神经网络),小墨学长还为大家整理了一份60天入门人工智能机器学习、深度学习、神经网络)的学习路线,从基础到进阶都包含在内,希望可以帮助到大家。

图片

学习路线的资料都下载打包好了

准备数据

假设我们要训练一个具有四个权重并能输出一个数字结果的模型,如下所示:

None

由于我们需要生成一些训练数据,因此假设权重为[2,3,4,7]:

import numpy as npw_list = np.array([2,3,4,7])

我们的模型将用于预测权重列表,因此在使用它生成一些训练数据后,我们假装不知道这些权重。

让我们创建10组输入样本数据——x_sample,每组x_sample是一个包含4个元素的数组,与权重的长度相同。

import randomx_list = []for _ in range(10):    x_sample = np.array([random.randint(1,100) for _ in range(len(w_list))])    x_list.append(x_sample)

这里,我们使用numpy,因为我们想利用numpy的点积函数轻松生成输出——y。

说到y,我们来生成一个包含10个元素的y_list:

​​​​​​​

y_list = []for x_sample in x_list:    y_temp = x_sample@w_list    y_list.append(y_temp)

我们的训练数据已准备就绪,无需下载任何内容,也无需使用DataLoader等,接下来,让我们定义模型。

定义模型

我们的模型可能是世界上最简单的模型,即以下代码中定义的一个简单的线性点积:

rt torch 

import torch.nn as nnclass MyLinear(nn.Module):    def __init__(self):        super().__init__()        self.w = nn.Parameter(torch.randn(len(w_list)))        def forward(self, x:torch.Tensor):        return self.w @ x

在上述代码中,使用self.w = nn.Parameter(torch.randn(len(w_list)))初始化了权重张量。

无需其他代码,我们的神经网络模型现已准备就绪,命名为——MyLinear。

准备训练模型

要训练模型,我们需要像LLM或Diffusion模型那样初始化其随机权重。

model = MyLinear()

几乎所有神经网络模型的训练都遵循以下步骤:

  • 前向传播以预测结果。

  • 与真实值进行比较以获取损失值。

  • 反向传播梯度损失值。

  • 更新模型参数。

因此,在开始训练之前,我们需要定义一个损失函数和一个优化器。

损失函数loss_fn将根据预测结果和真实结果计算损失值,优化器将用于更新权重。

​​​​​​​

loss_fn = nn.MSELoss()optimizer = torch.optim.SGD(model.parameters(), lr = 0.00001)

lr代表学习率,这是最难设置的超参数之一,确定最佳学习率(lr)通常需要根据模型、数据集和问题的特性进行反复试验。然不过有一些策略和技术可以帮助估计一个合理的学习率。

  • 从较小的学习率开始:一种常见做法是从较小的学习率(如0.001)开始,并根据观察到的收敛行为逐渐增加或减少它。

  • 学习率调度:可以使用学习率调度在训练过程中动态调整学习率。一种常见方法是阶梯衰减,即在固定数量的训练周期后降低学习率。另一种流行方法是指数衰减,即学习率随时间呈指数下降。

另外别忘了将输入和输出转换为torch张量对象。

​​​​​​​

x_input = torch.tensor(x_list, dtype=torch.float32)y_output = torch.tensor(y_list, dtype=torch.float32)

一切准备就绪,让我们开始训练模型。

训练模型

我们将训练周期数设置为100,这意味着我们将遍历训练数据100次。

# 开始训练模型num_epochs = 100for epoch in range(num_epochs):    for i, x in enumerate(x_input):        # 前向传播        y_pred = model(x)        # 计算损失值        loss = loss_fn(y_pred, y_output[i])        # 清空之前缓存的参数梯度        optimizer.zero_grad()        # 反向传播计算梯度        loss.backward()        # 更新模型参数        optimizer.step()    # 每10个epoch打印一次训练进度    if (epoch+1) % 10 == 0:        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))print("训练完成")

在上述代码中,我们可以看到两层循环,外层循环用于训练周期,内层循环用于遍历10组样本数据。

我们有10组输入,每组输入有4个元素,即x_1, x_2, x_3, 和 x_4。

正如我们在准备阶段所讨论的,第一步是使用模型预测一个结果:y_pred,然后,调用loss_fn来计算损失值。

在将损失值反向传播之前,我们需要通过调用optimizer.zero_grad()来清除上一次的梯度值。

最后,调用backward和optimizer.step()来更新模型参数。

运行代码,我们将看到程序输出类似于以下内容:

Epoch [10/100], Loss: 218.3843Epoch [20/100], Loss: 283.2002Epoch [30/100], Loss: 116.5593Epoch [40/100], Loss: 43.8340Epoch [50/100], Loss: 16.3244Epoch [60/100], Loss: 6.0721Epoch [70/100], Loss: 2.2586Epoch [80/100], Loss: 0.8400Epoch [90/100], Loss: 0.3124Epoch [100/100], Loss: 0.1162train done

随着时间的推移,损失值在下降,这看起来很不错,让我们检查模型中当前的权重。

model.w

得到的结果是:

Parameter containing:tensor([2.0027, 2.9958, 4.0009, 7.0017], requires_grad=True)

这非常接近[2,3,4,7]!模型已成功训练并找到了正确的权重值。

扩展模型规模

在上述示例中,我们只使用4个权重构建了模型,现在我们可以增加权重的数量,如下所示:

w_list = np.array([2,3,4,7,11,5,13])

并再次运行代码,通过增加训练周期数和更新学习率——lr,你将始终看到模型成功预测你给出的任何权重。

使用CUDA进行训练

要使用CUDA训练模型,我们需要将1)模型和2)训练数据移动到CUDA,以下是完整代码。

# ----------------------------------------------------------# 生成训练数据# ----------------------------------------------------------import numpy as np# 定义真实权重向量(作为训练目标)w_list = np.array([2,3,4,7,11,5,13])import random# 生成10个随机输入样本(每个样本长度与w_list相同)x_list = []for _ in range(10):    x_sample = np.array([random.randint(1,100) for _ in range(len(w_list))])    x_list.append(x_sample)# print(x_list)  # 可选:打印生成的输入样本# 计算对应的目标输出值(输入样本与真实权重的点积)y_list = []for x_sample in x_list:    y_temp = x_sample @ w_list  # 矩阵乘法计算预测值    y_list.append(y_temp)# -----------------------------------------------------------# 准备训练环境# -----------------------------------------------------------import torch import torch.nn as nn# 定义自定义线性模型class MyLinear(nn.Module):    def __init__(self):        super().__init__()        # 初始化可学习参数(长度与w_list相同)        self.w = nn.Parameter(torch.randn(len(w_list), dtype=torch.float32))        print("初始权重:", self.w)  # 打印初始化的权重值        def forward(self, x:torch.Tensor):        # 前向传播:权重向量与输入向量的点积        return self.w @ x     # 实例化模型并转移到GPUmodel = MyLinear().to("cuda")# 定义损失函数(均方误差)loss_fn = nn.MSELoss()# 定义优化器(随机梯度下降,学习率0.00001)optimizer = torch.optim.SGD(model.parameters(), lr = 0.00001)# 数据预处理x_input = torch.tensor(x_list, dtype=torch.float32).to("cuda")  # 输入数据转GPU张量y_output = torch.tensor(y_list, dtype=torch.float32).to("cuda")  # 目标数据转GPU张量# ------------------------------------------------------------# 开始训练模型# ------------------------------------------------------------num_epochs = 200  # 总训练轮次for epoch in range(num_epochs):    for i, x in enumerate(x_input):        # 前向传播        y_pred = model(x)  # 通过模型得到预测值        # 计算损失        loss = loss_fn(y_pred, y_output[i])  # 比较预测值与真实值        # 清空梯度缓存        optimizer.zero_grad()  # 清除之前的梯度信息        # 反向传播        loss.backward()  # 计算当前参数的梯度        # 参数更新        optimizer.step()  # 根据梯度更新模型参数    # 每10轮打印训练进度    if (epoch+1) % 10 == 0:        print('Epoch [{}/{}], Loss: {:.4f}'.format(epoch+1, num_epochs, loss.item()))print("训练完成")

总结
PyTorch简化了整个模型构建和训练过程,准备数据、准备训练和训练过程仅用几行代码即可完成,排除了不必要的复杂性。

另外我们精心打磨了一套基于数据与模型方法的 AI科研入门学习方案(已经迭代过5次),对于人工智能来说,任何专业,要处理的都只是实验数据,所以我们根据实验数据将课程分为了三种方向的针对性课程,包含时序、图结构、影像三大实验室,我们会根据你的数据类型来帮助你选择合适的实验室,根据规划好的路线学习 只需 4 个月左右(很多同学通过学习已经发表了 sci 一区及以下、ei会议等级别论文)学习形式为 直播+ 录播,多位老师为你的论文保驾护航,如果需要发高区也有其他形式。

PyTorch深度学习实战(1)——神经网络与模型训练过程详解 在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。 阅读详情

相关推荐

PyTorch深度学习实战(2)——PyTorch基础

PyTorch 是广泛应用于机器学习领域中的强大开源框架,因其易用性和高效性备受青睐。在本节中,将介绍使用 PyTorch 构建神经网络的基础知识。首先了解 PyTorch 的核心数据类型——张量对象。然后,我们将深入研究用于张量对象的各种操作。PyTorch 提供了许多帮助构建神经网络的高级方法及组件,并提供了利用 GPU 更快地训练神经网络的张量对象。

盼小辉丶的博客 5万+

带深度学习新手用pytorch从头构建神经网络!

让我们创建10组输入样本数据——x_sample,每组x_sample是一个包含4个元素的数组,与权重的长度相同。正如我们在准备阶段所讨论的,第一步是使用模型预测一个结果:y_pred,然后,调用loss_fn来计算损失值。我们的训练数据已准备就绪,无需下载任何内容,也无需使用DataLoader等,接下来,让我们定义模型。我们的模型可能是世界上最简单的模型,即以下代码中定义的一个简单的线性点积:​​​​​​​。我们的模型将用于预测权重列表,因此在使用它生成一些训练数据后,我们假装不知道这些权重。

浩子的博客 406

图神经网络实战(6)——使用PyTorch构建图神经网络

图数据集通常比简单的连接集合更加丰富,因为节点和边可以具有表示分数、颜色、单词等特征。包含这些额外信息在输入数据中对于生成最佳嵌入至关重要。在本节中,我们将使用 Cora 和 Facebook Page-Page 数据集,首先将它们视为表格数据集,观察香草神经网络在节点特征上的表现如何。然后,尝试在神经网络中加入拓扑信息,实现图神经网络 (Graph Neural Networks, GNN) 架构:一个同时考虑节点特征和边的简单模型。最后,我们将比较两种架构的性能。

盼小辉丶的博客 2万+

使用pytorch深度学习框架搭建神经网络

数据集为CIFAR10,CIFAR-10 数据集由 10 个类的 60000 张 32x32 彩色图像组成,每个类有 6000 张图像。有 50000 张训练图像和 10000 张测试图像。图像大小为3x32x32数据集分为 5 个训练批次和 1 个测试批次,每个批次有 10000 张图像。测试批次包含每个类中随机选择的 1000 张图像。训练批次包含按随机顺序排列的剩余图像,但某些训练批次可能包含来自一个类的图像多于另一个类的图像。在它们之间,训练批次正好包含来自每个类的 5000 张图像。

qq_57290048的博客 2933

RFSoC应用XCZU47DR八发八收FPGA设计方案

本文介绍了基于Xilinx XCZU47DR RFSoC芯片的八发八收FPGA设计方案。该方案采用集成射频数据转换器的SoC架构,支持8路14bit ADC(5GSPS)和8路14bit DAC(9.85GSPS),可直接处理5GHz以下射频信号。硬件设计包含高性能输入缓冲器、QMC校正和复杂混频器,适用于5G/6G通信、雷达、卫星通信等领域。文章详细阐述了ADC/DAC子系统参数,包括通道配置、采样率、带宽等特性,并提供了FPGA顶层模块的硬件接口设计,展示了多通道数据收发处理能力。该方案无需外置混频器,

toonyhe的博客 1787

二、基于C语言的JPEG解码代码详解

// JPEG解码 // 输入JPEG后输出Bitmap #include <stdio.h> #include <stdlib.h> #pragma warning(disable : 4996) unsigned int BuffIndex; // JPEG数据的位置 unsigned int BuffSize; // JPEG数据的大小 unsigned int BuffX; // 图像的横向尺寸 unsigned int BuffY; //

m0_37633745的博客 4455

pytorch 自动构建任意层的深度神经网络(DNN)

根据可变参数自动构建深度神经网络

夜晓岚的博客 4559

用户视角下的vfsglobal预约困境:从注册到登录的全流程避坑指南

本文详细解析了vfsglobal签证预约系统从注册到登录的全流程操作,帮助用户避开常见技术陷阱。针对IP限制、DNS解析、浏览器缓存等登录障碍提供实用解决方案,并揭示账号管理的隐藏规则与支付环节的延时处理技巧,助力用户高效完成签证预约。

ol78901234的博客 871

用Python构建一个简单的神经网络

这篇文章只是给像我一样的初学者提供一点思路以及了解一些库的使用,具体改进和拓展可以通过爬虫技术(如BeautifulSoup库)从网站上获取房子的相关信息,例如房间数量、客厅数量、厕所数量、房屋面积、地理位置和价格。将爬取到的数据保存为Excel表格或者直接用pandas加载为DataFrame。我们也可以对数据进行预处理,对网络进行模型优化,将训练好的模型部署为Web服务或API,以便实时接收用户输入并返回预测结果,也添加用户界面(如Flask或Django)以便用户友好地输入房屋特征并获取预测价格。

lovane_630的博客 1835

如何把Excel的数据导入python?

Python数据分析——excl导入数据的简单方法(xlrd) 本文的初衷是发现网上很多Excel导入Python都没有结合具体Excel文档进行讲解,所以这篇文档将会呈现一个简单快速的Excel+Python的入门方法。 开发环境 Prerequisites: 在开始用Python导入Excel之前,要配置好自己的开发环境,最好有IDE(terminal也可)+安装相应的数据分析包。 IDE :pycharm,vscode,etc 数据分析包:matplotlib,xlrd,numpy,etc 导入数

qq_40783513的博客 7万+

在 ABAP 环境中构建自定义健康监控指标:面向 SAP Cloud ALM 与 SAP Focused Run 的完整实践

本文介绍了在ABAP环境中开发自定义健康监控指标的方法。主要内容包括:1)标准监控指标的不足,如无法反映业务应用层面的问题;2)自定义监控架构,通过metric provider定义指标,由采集作业周期性获取数据并存储;3)核心实现技术,包括IF_GSM_API_PROVIDER接口和三个关键方法;4)指标从ABAP推送到SAP Cloud ALM/Focused Run的完整流程;5)开发实践步骤,从业务分析到具体实现。该方案可帮助团队监控业务关键指标,提升系统运维能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 263

深度学习入门:Python搭建简单神经网络模型

在未来的学习和应用中,还可通过调整网络结构、优化超参数等方式,不断提升模型性能,探索深度学习在更多领域的应用潜力。而反向传播是神经网络学习的关键,它基于梯度下降算法,根据预测值与真实值的误差,从输出层反向计算每个神经元的梯度,进而更新权重和偏置,以最小化损失函数(如均方误差MSE、交叉熵损失函数等)。输入层接收原始数据,输出层给出最终预测结果,隐藏层则负责提取数据特征,通过多层神经元的层层传递与处理,实现复杂的映射关系。其中,x_i 是输入值,w_i 是对应的权重,b 是偏置,f 是激活函数。

2501_91652317的博客 455

激光除草技术原理与应用全解析

激光除草技术通过光热、光化学等效应精准破坏杂草组织,核心参数包括功率(20-6000W)、波长(400nm-10.6μm)和脉冲宽度。主要应用于大田作物(如玉米、棉花)、经济作物(烟草、果树)及城市绿化,具有环保(无化学污染)、高效(识别率≥95%)和非接触等优势,但存在设备成本高(20-50万元)、技术门槛高等局限。当前技术融合AI识别、多光谱协同等创新,国产设备如华工智耘已实现95.3%识别精度。虽短期投入较高,但长期可降低30%除草成本,并带来环境效益(每亩减排1.2吨CO₂)

start_up_go的博客 557

PyTorch 深度学习入门

深度学习是机器学习的一个分支,其中编写了模仿人脑功能的算法。深度学习中最常用的库是 Tensorflow 和 PyTorch。由于有各种可用的深度学习框架,人们可能想知道何时使用 PyTorch。以下是人们可能更喜欢将 Pytorch 用于特定任务的原因。Pytorch 是一个开源深度学习框架,带有 Python 和 C++ 接口。Pytorch 位于 torch 模块中。在 PyTorch 中,必须处理的数据以张量的形式输入。如果您的系统中安装了 Anaconda Python.........

努力是为了站在万人之中,成为别人的光 2万+

Unity零基础到入门 ☀️| 小万字教程 对 Unity 中的 协程 ❤️全面解析+实战演练❤️

Unity,为了让Unity基础知识专栏更加完善,又肝了一篇协程来学习。 协程在Unity中还是很常用的,一起来看一下协程的基本概念和使用方法吧!

努力前行,总会成为自己心中的那道光 8万+

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 906

【DL with Pytorch】第 1 章 :深度学习与PyTorch简介

概述本章介绍了这两大主题:深度学习和PyTorch。在这里,您将能够探索深度学习的一些最流行的应用,了解 PyTorch 是什么,并使用 PyTorch 构建单层网络,这将是您将所学应用于现实生活的起点数据问题。到本章结束时,您将能够使用 PyTorch 的语法构建神经网络,这在后续章节中必不可少。深度学习是机器学习的一个子集,专注于使用神经网络解决复杂的数据问题。由于软件和硬件的进步使我们能够收集和处理大量数据(我们谈论的是数百万和数十亿的条目),它现在变得越来越流行。考虑到深度神经网络需要大量数据才能正

sikh_0529的博客 1020

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

用PyTorch构建神经网络,详细

在本文章中,我们将使用PyTorch从头开始实现一个简单的神经网络。 注:阅读本文之前,最好可以了解神经网络的工作原理。 虽然有很多库可以用于深度学习,但我最喜欢 PyTorch。作为一名python 程序员,我喜欢 PyTorch 的 python 行为是原因之一。它主要使用了python 的风格和能力,这是很容易理解和使用。 在其核心,PyTorch提供两个主要特性: 一个类似于numpy 的n 维张量,但可以在 gpu 上运行; 自动区分建立和训练神经网络。 什么是神经网络? 神经网络是一

pythonxiaopeng的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

深度学习与PyTorch:构建神经网络

1.背景介绍 深度学习是一种人工智能技术,它通过模拟人类大脑中的神经网络来处理和解决复杂的问题。PyTorch是一个流行的深度学习框架,它提供了一种简单易用的方法来构建和训练神经网络。在本文中,我们将讨论深度学习的背景和核心概念,探讨其核心算法原理和具体操作步骤,并通过实际代码示例来展示如何使用PyTorch来构建神经网络。 1. 背景介绍 深度学习是一种人工智能技术,它通过模拟人类大脑中的...

AI天才研究院 1031

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

深度学习为什么选择Pytorch?史上最详细Pytorch入门教程

目录 前言 一、 Pytorch介绍 1.常见的深度学习框架 2.Pytorch框架的崛起 3.Pytorch与Tensorflow多方位比较 二、Tensors 1.Tensor的创建 2.Tensor的操作 3.Tensor与Numpy 三、Autograd的讲解 1.模型中的前向传播与反向传播 2.利用autograd计算梯度 四、 构建神经网络模型 1.数据的构造 2.模型的构造 3.优化器选择和配置 4.主函数 前言 工欲善其事,必先利其器。近几年深度学习飞速

8948

pytorch入门——构建神经网络

本文介绍了基于pytorch神经网络的典型构建流程,介绍了损失函数 反向传播 更新参数等

qq_53536373的博客 7561

神经网络构建与训练深度学习模型全过程(PyTorch & TensorFlow)

神经网络(Neural Network)是一种模拟人脑神经元的数学模型,其目的是通过模拟神经元之间的连接与传递信息的方式,来完成复杂的数据处理任务。神经网络由若干层神经元组成,通常分为输入层、隐藏层和输出层。每个神经元接收输入信号,并经过激活函数处理后产生输出信号,输出信号又成为下一层神经元的输入。每个连接上的权重决定了输入的重要性,而偏置(bias)则用于调整神经元的输出。当输入层接收数据后,信息通过权重矩阵传递到隐藏层,并在此处进行复杂的计算与转换。

switch616的博客 9546

Python 深度学习框架 PyTorch 入门:构建简单神经网络

在 PyTorch 中,构建神经网络需要继承torch.nn.Module类,这是 PyTorch 中所有神经网络模块的基类。通过继承这个类并实现__init__和forward方法,我们可以定义自己的网络结构。创建一个简单的全连接神经网络return out在上述代码中,我们定义了一个名为SimpleNet的类,它继承自nn.Module。__init__方法:在__init__方法中,我们定义了网络的各个层。

数字魔方操控师的博客 1294

【深度学习】与【PyTorch实战】

神经网络模仿生物神经系统,由许多互联的神经元(人工神经元)组成。输入层:接收外部输入数据,每个神经元代表一个输入特征。隐藏层:位于输入层和输出层之间,负责提取和处理输入特征,数量和结构可以多样化。输出层:产生最终的输出,每个神经元代表一个输出结果。神经网络通过调整各层之间的连接权重,学习数据中的模式和特征。动态计算图:支持即时计算,便于调试和修改模型结构。强大的自动微分:通过autograd模块实现自动求导,简化了梯度计算过程。模块化设计:提供丰富的预定义模块和函数,方便构建和训练复杂的神经网络。

小李很执着的博客 2882

PyTorch构建卷积神经网络

卷积神经网络由一个或多个卷积层和顶端的全连通层组成,同时也包括关联权重和池化层。与其他深度学习结构相比,卷积神经网络在图像和语音识别方面能够给出更好的结果,且考量的参数更少。 卷积神经网络的运作,以图像识别举例: 神经网络有输入输出值,当输入值是图片时,实际输入的并不是我们肉眼看到的图案,而是只能被计算机识别的一堆数字。卷积神经网络有一个批量过滤器,持续不断地在图片上滚动收集图片里的信息,每一次收...

Steven的博客 8056

【DL with Pytorch】第 2 章 : 神经网络的构建块

它从感知器的定义开始,感知器是一个受人类神经元启发的单元,它将数据作为输入来对其执行转换。一般而言,构建神经网络可以在非常简单的层面上使用诸如 scikit-learn(不适合深度学习)之类的库来实现,它可以为您执行所有数学运算而没有太大的灵活性,或者在非常复杂的层面上实现通过从头开始对训练过程的每一步进行编码,或者使用更强大的框架,从而提供更大的灵活性。激活函数的主要目的是打破模型的线性,考虑到使用神经网络解决的大多数现实生活中的数据问题不是由一条线定义的,而是由一个复杂的函数定义的,这一点至关重要。

sikh_0529的博客 820
上一篇: DeepSeek爆火!高中生用AI学习,是开挂还是踩坑?这份攻略请收好!
Javaaaaaaaaaaa13
博客等级 码龄2年 381粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值