当前位置: 首页 > news >正文

神经网络以及简单的神经网络模型实现

神经网络基本概念:

  1. 神经元(Neuron)

    神经网络的基本单元,接收输入,应用权重并通过激活函数生成输出
  2. 层(Layer)

    神经网络由多层神经元组成。常见的层包括输入层、隐藏层和输出层
  3. 权重(Weights)和偏置(Biases)

    权重用于调整输入的重要性,偏置用于调整模型的输出
  4. 激活函数(Activation Function)

    在神经元中引入非线性,如ReLU(Rectified Linear Unit)、Sigmoid、Tanh等。
  5. 损失函数(Loss Function)

    用于衡量模型预测与实际结果之间的差异,如均方误差(MSE)、交叉熵损失等。
  6. 优化器(Optimizer)

    用于调整模型权重以最小化损失函数,如随机梯度下降(SGD)、Adam等。

简单的神经网络示例:

下面是一个使用PyTorch构建简单线性回归的神经网络示例代码。这个示例展示了如何定义一个具有一个隐藏层的前馈神经网络,并训练它来逼近一些随机生成的数据点。

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
import matplotlib.pyplot as plt# 生成一些随机数据
np.random.seed(0)
X = np.linspace(0, 10, 100).reshape(-1, 1).astype(np.float32)
y = np.sin(X) + np.random.normal(0, 0.1, size=X.shape).astype(np.float32)# 转换为PyTorch的张量
X_tensor = torch.tensor(X)
y_tensor = torch.tensor(y)# 定义一个简单的神经网络模型
class NeuralNet(nn.Module):def __init__(self):super(NeuralNet, self).__init__()self.fc1 = nn.Linear(1, 10)  # 输入层到隐藏层self.relu = nn.ReLU()        # 激活函数self.fc2 = nn.Linear(10, 1)  # 隐藏层到输出层def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return x# 实例化模型、损失函数和优化器
model = NeuralNet()
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = optim.Adam(model.parameters(), lr=0.01)  # Adam优化器# 训练模型
epochs = 5000
losses = []
for epoch in range(epochs):optimizer.zero_grad()outputs = model(X_tensor)loss = criterion(outputs, y_tensor)loss.backward()optimizer.step()losses.append(loss.item())if (epoch+1) % 1000 == 0:print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.6f}')# 绘制损失函数变化图
plt.plot(losses, label='Training loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()
plt.show()# 测试模型
model.eval()
with torch.no_grad():test_x = torch.tensor([[5.0]])  # 测试输入predicted = model(test_x)print(f'预测值: {predicted.item()}')

运行结果展示: 

代码理解:

下面便是详细分解这段代码进行理解: 

  • 生成数据

    • 使用 numpy 生成一些随机的带有噪声的正弦函数数据。
      import numpy as np# 生成带有正态分布噪声的正弦函数数据
      def generate_data(n_samples):np.random.seed(0)  # 设置随机种子以确保结果可复现X = np.random.uniform(low=0, high=10, size=n_samples)y = np.sin(X) + np.random.normal(scale=0.3, size=n_samples)return X, y# 生成数据
      X_train, y_train = generate_data(100)
      

  • 定义神经网络模型

    • NeuralNet 类继承自 nn.Module,定义了一个具有一个隐藏层的前馈神经网络。使用ReLU作为隐藏层的激活函数。
      import torch
      import torch.nn as nn
      import torch.optim as optim# 定义神经网络模型
      class NeuralNet(nn.Module):def __init__(self):super(NeuralNet, self).__init__()self.fc1 = nn.Linear(1, 10)  # 输入大小为1(X),输出大小为10self.fc2 = nn.Linear(10, 1)  # 输入大小为10,输出大小为1self.relu = nn.ReLU()def forward(self, x):x = self.relu(self.fc1(x))x = self.fc2(x)return x# 实例化模型
      model = NeuralNet()# 打印模型结构
      print(model)
      

  • 实例化模型、损失函数和优化器

    • model 是我们定义的神经网络模型。
    • criterion 是损失函数,这里使用均方误差损失。
    • optimizer 是优化器,这里使用Adam优化器来更新模型参数。
      # 定义损失函数(均方误差损失)
      criterion = nn.MSELoss()# 定义优化器(Adam优化器)
      optimizer = optim.Adam(model.parameters(), lr=0.01)
      

  • 训练模型

    • 使用 X_tensor 和 y_tensor 进行训练,优化模型使其逼近 y_tensor
      # 将numpy数组转换为PyTorch张量
      X_tensor = torch.tensor(X_train, dtype=torch.float32).view(-1, 1)
      y_tensor = torch.tensor(y_train, dtype=torch.float32).view(-1, 1)# 训练模型
      def train_model(model, criterion, optimizer, X, y, epochs=1000):model.train()for epoch in range(epochs):optimizer.zero_grad()output = model(X)loss = criterion(output, y)loss.backward()optimizer.step()if (epoch+1) % 100 == 0:print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')train_model(model, criterion, optimizer, X_tensor, y_tensor)
      

  • 测试模型

    • 使用 model.eval() 将模型切换到评估模式,使用 torch.no_grad() 关闭梯度计算。
    • 测试输入为 5.0,打印预测结果。
      # 测试模型
      model.eval()
      with torch.no_grad():test_input = torch.tensor([[5.0]], dtype=torch.float32)predicted_output = model(test_input)print(f'预测输入为 5.0 时的输出: {predicted_output.item():.4f}')
      

相关文章:

神经网络以及简单的神经网络模型实现

神经网络基本概念: 神经元(Neuron): 神经网络的基本单元,接收输入,应用权重并通过激活函数生成输出。 层(Layer): 神经网络由多层神经元组成。常见的层包括输入层、隐藏层…...

java中压缩文件的解析方式(解析文件)

背景了解:java中存在IO流的方式,支持我们对文件进行读取(Input,从磁盘到内存)或写入(output,从内存到磁盘),那么我们在面对 “zip”格式或者 “rar” 格式的压缩文件&…...

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述:最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记,考虑到在线 VScode 支持终…...

Jupyter Lab 使用

Jupyter Lab 使用详解 Jupyter Lab 是一个基于 Web 的交互式开发环境,提供了比 Jupyter Notebook 更加灵活和强大的用户界面和功能。以下是使用 Jupyter Lab 的详细指南,包括安装、基本使用、设置根目录和扩展功能等内容。 一、Jupyter Lab 安装与启动…...

MyBatis where标签内嵌foreach标签查询报错‘缺失右括号‘或‘命令未正确结束‘

MyBatis <where>标签内嵌<foreach>标签查询报错’缺失右括号’或’命令未正确结束’ <where>标签内嵌<foreach>标签 截取一段脱敏xml&#xff0c;写明大概意思 <select id"queryLogByIds" resultMap"BaseResultMap">SELE…...

重生奇迹MU 群战王牌

圣导师是重生奇迹MU游戏中八大职业之一&#xff0c;拥有风度翩翩、潇洒自如的形象和神一样的实力。无论是刷怪、PK、打boss还是混战&#xff0c;圣导师都表现出压制其他职业的强大气势。因此&#xff0c;这个职业在游戏中备受欢迎&#xff0c;人气非常高。 实力强大的二代隐藏…...

SpinalHDL之VHDL 和 Verilog 生成

本文作为SpinalHDL学习笔记第十六篇&#xff0c;记录使用SpinalHDL代码生成Verilog/VHDL代码的方法。 SpinalHDL学习笔记总纲链接如下&#xff1a; SpinalHDL 学习笔记_spinalhdl blackbox-CSDN博客 目录&#xff1a; 1.从 SpinalHDL 组件生成 VHDL 和 Verilog 2.生成的 VHD…...

c语言中的字符串函数

strstr函数 函数介绍 strstr 用于在一个字符串中查找另一个字符串的首次出现。 我们来看这个函数的参数名字&#xff1a;haysytack&#xff08;干草堆&#xff09;needle&#xff08;针&#xff09;,这个其实就是外国的一句谚语&#xff1a;在干草堆中找一根针&#xff0c;就…...

[AI 大模型] 百度 文心一言

文章目录 [AI 大模型] 百度 文心一言简介模型架构发展新技术和优势API 代码示例 [AI 大模型] 百度 文心一言 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0DwAIh0T-1720667576892)(https://i-blog.csdnimg.cn/direct/283919e5d78b4951ba1ade5dcfc…...

机器学习开源分子生成系列(2)-基于三维形状和静电相似性的DeepFMPO v3D安装及使用

前言 本文是基于 3D 的分子生成方法DeepFMPO v3D的介绍及安装使用。 一、DeepFMPO v3D是什么&#xff1f; github代码介绍文章 在药物发现中&#xff0c;如何寻找具新颖性和结构多样性的候选分子是颇受药物设计科学家关注的问题。通过虚拟筛选的化学空间搜索往往会受限于筛选…...

机器学习-16-分布式梯度提升库XGBoost的应用

参考XGBoost库 1 XGBoost分布式梯度提升库 XGBoost,全称为eXtreme Gradient Boosting,是一个优化的分布式梯度提升库,旨在高效、灵活且便携。它在Gradient Boosting框架下实现了机器学习算法,并广泛用于分类、回归和排序任务。XGBoost之所以受到广泛欢迎,主要归功于它的…...

视觉/AIGC面经->多模态

1.ocr检测如何做?qwen的文本检测是否合理? paligemma: <loc0110><loc0124><loc0224><loc0389> plate ; <loc0244><loc0130><loc0281><loc0430> plate ; <loc0364><loc0820><loc0403><loc0951> pl…...

<数据集>钢板缺陷检测数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1986张 标注数量(xml文件个数)&#xff1a;1986 标注数量(txt文件个数)&#xff1a;1986 标注类别数&#xff1a;7 标注类别名称&#xff1a;[crescent gap, silk spot, water spot, weld line, oil spot, punchin…...

EdgeOne安全能力开箱测评挑战赛

活动地址&#xff1a;EdgeOne安全能力开箱测评挑战赛-腾讯云开发者社区-腾讯云 随着网络攻击日益频繁&#xff0c;企业网站面临着数据泄露、DDoS攻击、CC攻击等多种安全威胁。如何有效保护企业网站安全&#xff0c;成为企业IT部门的重要任务。腾讯云EdgeOne作为一款集成了CDN和…...

神经网络识别数字图像案例

学习资料&#xff1a;从零设计并训练一个神经网络&#xff0c;你就能真正理解它了_哔哩哔哩_bilibili 这个视频讲得相当清楚。本文是学习笔记&#xff0c;不是原创&#xff0c;图都是从视频上截图的。 1. 神经网络 2. 案例说明 具体来说&#xff0c;设计一个三层的神经网络。…...

c++包管理器

conan conan search&#xff0c;查看网络库 conan profile detect&#xff0c;生成缓存信息conan new cmake_exe/cmake_lib&#xff0c;创建cmakelists.txtconan install .&#xff0c;执行Conanfile.txt中的配置&#xff0c;生成相关的bat文件 项目中配置Conanfile.txt(或者…...

监控易V7.6.6.15升级详解7,日志分析更高效

随着企业IT系统的日益复杂&#xff0c;日志管理成为了保障系统稳定运行、快速定位问题的重要工具。为了满足广大用户对日志管理功能的更高需求&#xff0c;监控易系统近日完成了重要版本升级&#xff0c;对日志管理功能进行了全面优化和新增。 一、Syslog日志与SnmpTrap日志统…...

HTML表格、表单标签

目录 一、表格 &#xff08;1&#xff09;关于表格中标签说明 &#xff08;2&#xff09;关于表格中属性说明 &#xff08;3&#xff09;简单操作演示 &#xff08;4&#xff09;表格小结 二、表单 &#xff08;1&#xff09;简单操作演示 &#xff08;2&#xff09;注…...

(Windows环境)FFMPEG编译,包含编译x264以及x265

本文使用 MSYS2 来编译 ffmpeg 一、安装MSYS2 MSYS2 是 Windows 下的一组编译套件&#xff0c;它可以在 Windows 系统中模拟 Linux 下的编译环境&#xff0c;如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。 MSYS2 的安装也非常省心&#x…...

notepad++中文出现异体汉字,怎么改正

notepad显示异体字&#xff0c;如何恢复&#xff1f; 比如 “门” 和 “直接” 的"直"字&#xff0c;显示成了 方法 修改字体&#xff0c; 菜单栏选择 Settings(设置&#xff09;&#xff0c;Style Configurator…&#xff08;语言格式设置…&#xff09;&#xf…...

产品经理开需求评审会议2026年这5款会议语音转文字工具 帮你节省90会议纪要整理时间

做了5年产品经理&#xff0c;谁懂啊&#xff0c;每周三四场需求评审会&#xff0c;自己记笔记跟不上&#xff0c;转头leader就让你出整理好的带待办的纪要&#xff0c;漏一个需求点就要背锅&#xff1b;之前录了音自己逐字转&#xff0c;1小时的会我要整理2小时&#xff0c;经常…...

当Texstudio遇见AI:构想一个基于快马平台的智能LaTeX代码助手插件

作为一个长期使用LaTeX撰写学术论文的用户&#xff0c;我经常在Texstudio和各类在线工具之间来回切换。最近尝试了InsCode(快马)平台的AI辅助功能后&#xff0c;突然萌生了一个想法&#xff1a;如果能将AI代码生成能力直接集成到Texstudio里&#xff0c;该有多方便&#xff1f;…...

用快马平台5分钟打造heic转jpg在线工具原型,零代码实现图片格式转换

最近工作中遇到一个需求&#xff1a;需要把手机拍摄的HEIC格式照片批量转换成JPG格式。这种格式转换的需求其实很常见&#xff0c;特别是现在iPhone默认都使用HEIC格式保存照片。作为一个前端开发者&#xff0c;我决定用InsCode(快马)平台快速实现一个在线转换工具的原型。 需求…...

2026东南亚电商平台对比:Shopee vs Lazada终极指南

进入东南亚市场时&#xff0c;很多商家都会面临一个典型问题&#xff1a;Shopee 和 Lazada 应该如何选择&#xff1f;两大平台在流量结构、用户习惯、入驻门槛以及成本模型上存在明显差异。随着 2026 年市场环境变化&#xff0c;TikTok Shop 的崛起也在重塑整体流量格局。对于商…...

WINFORM - DevExpress -> 从安装到汉化:DevExpress全流程实战指南

1. DevExpress简介与环境准备 DevExpress是一套功能强大的.NET用户界面控件库&#xff0c;特别适合WinForms、WPF等桌面应用开发。我第一次接触DevExpress是在2015年&#xff0c;当时就被它丰富的UI组件和流畅的动画效果惊艳到了。经过这些年的版本迭代&#xff0c;现在的DevEx…...

Openclaw接入自动发文教程

本课概览 Microsoft Agent Framework (MAF) 提供了一套强大的 Workflow&#xff08;工作流&#xff09; 框架&#xff0c;用于编排和协调多个智能体&#xff08;Agent&#xff09;或处理组件的执行流程。 本课将以通俗易懂的方式&#xff0c;帮助你理解 MAF Workflow 的核心概念…...

godot自身节点能拖进脚本 其他场景中的节点得实例化才能拖

自身节点能拖进自己脚本 但是其他场景的节点得实例化那个场景才能拖 不然是$....

别让格式拖垮论文!Paperxie AI 一键盘活你的毕业定稿

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 凌晨两点的宿舍&#xff0c;键盘敲击声断断续续&#xff0c;桌前的本科生盯着屏幕上的论文文档叹气 —— 内…...

手把手教你用VSCode和ST-Link V2给ODrive V3.6编译烧录056固件(附避坑指南)

从零开始&#xff1a;ODrive V3.6固件编译与烧录全流程实战指南 当你第一次拿到ODrive V3.6这款高性能电机驱动板时&#xff0c;可能会被它强大的功能所吸引&#xff0c;同时也可能对如何开始使用感到些许迷茫。本文将带你一步步完成从环境搭建到固件烧录的全过程&#xff0c;…...

Tessent测试流程文件里的Tcl魔法:用if/else让你的扫描测试配置更灵活

Tessent测试流程文件里的Tcl魔法&#xff1a;用if/else让你的扫描测试配置更灵活 在芯片测试领域&#xff0c;Tessent Shell作为业界领先的测试解决方案&#xff0c;其Test Procedure File&#xff08;测试流程文件&#xff09;的灵活运用往往能决定测试效率的高低。今天我们要…...