简单神经网络

Python实现简单的神经网络 在说神经网络之前,我们讨论一下神经元(Neurons),它是神经网络的基本单元。神经元先获得输入,然后执行某些数学运算后,再产生一个输出。比如一个2输入神经元的例子: 在这个神经元里,输入总共经历了3步数学运算, 先将输入乘以权重(weight): ... 阅读详情

最近我老师帮我找了篇论文来看,我看了,又是一个新模型,大概就是图神经网络+信息论IB。所以我去github上找了个简单的神经网络的项目,我跑一跑,加深对神经网络的认识。
https://github.com/buptsdz/CIFAR10-nn

1

这个简单的神经网络是做判断任务的,CIFAR-10这个数据集有60000个图片,十个类,那么如果是随机判断的话,只有10%的概率判断对。

# 导入数据集
transform = transforms.Compose([
    transforms.ToTensor(),#将图像转换为张量
    transforms.Normalize((0.5, ), (0.5, )) #数据归一化
])
dataset = datasets.CIFAR10(root='./data/', train=True, transform=transform, download=True)

datasets.CIFAR10共有四个参数,root是数据集的路径,data_batch_1,data_batch_2,data_batch_3,data_batch_4,data_batch_5代表了训练集的五万张图片,test_batch代表了测试集的一万张图片;train为true代表加载的是训练集,false代表加载的是测试集;transform代表的是预处理操作,所谓的张量就是torch里面的多维数组,这个是基本操作,原来均值0.5是像素值减去0.5,标准差0.5是像素值除以0.5;download没啥好说的,就是如果root路径没有数据集的话就下载它。
在这里插入图片描述

2

# 导入库
from torch.utils.data import random_split

# 设置学生ID的最后一位数字
student_last_id = 5
split_ratio = 0.7 if student_last_id <= 4 else 0.8

# 根据ID拆分数据集,8:2
train_size=int(len(dataset)*split_ratio)
val_size=len(dataset)-train_size
train_dataset,val_dataset=random_split(dataset,[train_size,val_size])

起初我看到这段代码的时候很疑惑,不是有测试集了吗,但是这个划分的是训练集和验证集。
这个student_last_id名字取得不好,干脆就叫id,那么8成是训练集,2成是验证集,train_size就是40000,vla_size就是10000。random_split就是划分方法而已。

3

# 数据加载器
from torch.utils.data import DataLoader
batch_size=32+id
train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)
val_loader=DataLoader(val_dataset,batch_size=batch_size,shuffle=False)
print(f"training on {train_size} images, validation on {val_size} images")

这部分是一个数据加载器,数据加载器其实也是参数,只不过它是model的参数,表示把数据读到模型里。
这个dataloader函数参数很多啊。train_dataset就是训练集,batch_size就是说多少个样本同时进行训练,像此处就是37个样本为一批同时进行训练,shuffle=true就是打乱处理。我觉得加上drop_last=False这个参数比较好,把最后一批丢掉,毕竟4000除以37不能整除。

4

# 定义神经网络模型
model = torch.nn.Sequential(
    torch.nn.Flatten(),  # 输入层:将 32x32x3 的图像展平为 3072 维向量
    torch.nn.Linear(32 * 32 * 3, 512),  # 全连接层:输入 3072 维,输出 512 维
    torch.nn.BatchNorm1d(512),  # 批标准化:加快训练并提高模型的泛化能力
    torch.nn.ReLU(),  # 激活函数:ReLU 激活函数引入非线性
    torch.nn.Linear(512, 256),  # 增加隐藏层:输入 512 维,输出 256 维
    torch.nn.BatchNorm1d(256),  # 批标准化:再次增强模型的稳定性和收敛速度
    torch.nn.ReLU(),  # 激活函数:隐藏层的 ReLU 激活
    torch.nn.Linear(256, 10),  # 输出层:将隐藏层输出映射到 10 类
)

我看懂这个神经网络了,发明神经网络的人真是个天才。它是利用了数学的矩阵操作,一个图像就是一个32323的三维张量,把这个三维张量展成一维就是3072。那么在这一批37个样本中,就可以看成是一个37行,3072列的二维矩阵[37,3072][3072512]=[37,512],这个[3072,512]就是权重值,哪些元素比较重要,哪些元素不重要,还有一个512列的一维向量是偏置向量。

      |
      |        /
      |       /
      |      /
      |     /
      |____/__________
        0

尽管我还不理解ReLU激活函数为什么要是这样的,但是把它理解为炒菜要加盐就好了

5

现在是22:17,我到现在才开始学习,我感觉有点不合适。我觉得我应该记录我每天的学习时间,这样我才能逐渐进步。我登陆了一个番茄计时器的网站,我每次学习前都要去打卡,这样我就可以知道我昨天学习了多少时间。

# 模型训练和评估,并跟踪损失和准确性
train_losses=[]
train_accuracies=[]
val_accuracies=[]

for epoch in range(epochs):
    model.train()
    running_loss=0.0
    corrects=0
    total=0
    for inputs,labels in train_loader:
        optimizer.zero_grad()
        outputs=model(inputs)
        loss=criterion(outputs,labels)
        loss.backward()
        optimizer.step()
        running_loss+=loss.item()
        _,preds=torch.max(outputs,1)
        total+=labels.size(0)
        corrects+=(preds==labels).sum().item()
    
    train_accuracy=100*corrects/total
    print(f'epoch:{epoch+1}/{epochs},loss:{running_loss:.4f},accuracy:{train_accuracy:.2f}%')

    # 评估模型
    model.eval()
    corrects=0
    total=0
    with torch.no_grad():
        for inputs,labels in val_loader:
            outputs=model(inputs)
            _,preds=torch.max(outputs,1)
            total+=labels.size(0)
            corrects+=(preds==labels).sum().item()

    val_accuracy=100*corrects/total
    print(f'Validation Accuracy:{val_accuracy:.2f}%')

    train_losses.append(running_loss)
    train_accuracies.append(train_accuracy)
    val_accuracies.append(val_accuracy)

python真是太强大了,把复杂的操作用一句代码就完成了。计算损失,然后反向传播,其实反向传播这个词很玄乎,也很复杂,比如说有两个参数吧,w1和w2,就是用求导的办法求损失对参数的导数,原来这个导数就是梯度,只不过是多元函数的导数。我理解了比如说我们要到半山腰,然后走过了到山顶了,那就是走的太快了嘛,那就减慢速度,这就是反向传播和优化器。

神经网络原理&一个简单的神经网络模型搭建 神经网络基本原理 文章目录神经网络基本原理前言一、神经网络是什么?1.1 神经网络的分类1.2 神经网络结构图1.3 神经元1.4 为什么神经网络能预测?二、 一个最简单的神经网络1.去不去爬山?2.案例代码2.1 引入类库2.2 创建数据2.3 初始假设2.4 神经元计算2.5 运行结果2.6 小结3.神经网络的自我学习总结 前言 神经网络是一门重要的机器学习技术,它是目前最为火热的研究方向–深度学习的基础。本文以一个生活中的小场景切入问题,详细的介绍了人工神经网络的本质基本原理。 一、神经网络是什 阅读详情

相关推荐

从零开始用 Python 构建一个简单的神经网络

线性可分数据集 正如我们在机器学习教程的前一章中所展示的,仅由一个感知器组成的神经网络足以分离我们的示例类。当然,我们精心设计了这些类以使其工作。有许多类集群,对于它们不起作用。我们将查看其他一些示例,并将讨论无法分离类的情况。 我们的类是线性可分的。线性可分性在欧几里得几何中有意义。两组点(或类)称为线性可分的,如果平面中至少存在一条直线,使得一类的所有点都在直线的一侧,而另一类的所有点都在另一侧边。 更正式的: 如果两个数据簇(类)可以通过线性方程形式的决策边界分开 ∑一世=1nX一世⋅瓦

pydby01的博客 6121

2024年最新循环神经网络,GitHub已标星16k

wxhw_{xh}wxh​、whhw_{hh}whh​、whyw_{hy}why​和两个偏置项bhbhbh、bybyby 自始至终都是固定不变的。在反向传播时,三个参数矩阵和两个偏置项由梯度下降法更新。

2401_84140776的博客 1281

用tensorflow建造一个简单的神经网络

reference:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/3-2-create-NN/ 这篇文章主要讲怎样建造一个完整的神经网络,包括添加神经层,计算误差,训练步骤 定义一个添加层神经层函数 我们知道一个神经网络可能包含很多个隐藏层,所以如果我们定义一个添加层函数,在后面如果需要增加神经层就只

诗蕊的专栏 6205

全连接神经网络的原理及Python实现

♚作者:李小文,先后从事过数据分析、数据挖掘工作,主要开发语言是Python,现任一家小型互联网公司的算法工程师。Github:https://github.com/t...

Python中文社区 2612

python实现简单的神经网络,python实现神经网络算法

学习人工智能时,我给自己定了一个目标--用Python写一个简单的神经网络。为了确保真得理解它,我要求自己不使用任何神经网络库,从头写起。多亏了Andrew Trask写得一篇精彩的博客,我做到了!下面贴出那九行代码:在这篇文章中,我将解释我是如何做得,以便你可以写出你自己的。我将会提供一个长点的但是更完美的源代码。首先,神经网络是什么?人脑由几千亿由突触相互连接的细胞(神经元)组成。突触传入足够的兴奋就会引起神经元的兴奋。这个过程被称为“思考”。我们可以在计算机上写一个神经网络来模拟这个过程。不需要在生物

ynca67269的博客 5188

Capsule胶囊神经网络github源码

原地址https://github.com/Sarasra/models/tree/master/research/capsules

破解神经网络、攻击GPU,AI黑客教程来了,已登GitHub热榜

随着深度学习的发展,各行各业都在考虑将相关新技术引入业务场景中,网络安全领域也不例外。近一段时间以来,很多网络安全公司都尝试用神经网络去检测病毒、发现程序后门等,而一些数据公司也使用了神经网络发现和检测恶意爬虫程序。但是,神经网络真的在软件层面上是安全吗?今日的 GitHub 趋势榜上有一个「骇入神经网络指南」项目。作者提供了一系列教学资料和代码,告诉了我们黑客会怎样对神经网络发起攻击。和对抗样本攻击不同,这些攻击都是从软件层面进行的,和使用对抗样本混淆模型能力的攻击不同。

ewii12567的博客 674

CIFAR_10_数据集及源代码.zip

我调试好的代码,里面包括数据,源代码2份,PPT,只要修改文件读取路径就可以使用。可以配合中国大学MOOC里的《深度学习应用开发-TensorFlow实践》课程学习,数据集官网下载太慢了,我这里下好了的。

TensorFlow入门教程(9)CIFAR-10图像识别

# #作者:韦访 #博客:https://blog.youkuaiyun.com/rookie_wei #微信:1007895847 #添加微信的备注一下是优快云的 #欢迎大家一起学习 # 1、CIFAR-10数据集简介 CIFAR-10数据集包含10个类别的RGB彩色图片。图片尺寸为32×32,这十个类别包括:飞机、汽车、鸟、猫、鹿、狗、蛙、马、船、卡车。一共有50000张训练图片和10000张测试图...

韦访的专栏 1万+

RAW、RGB、YUV图像格式的采样与存储原理详解

本文详细解析了RAW、RGB和YUV三种核心图像格式的采样与存储原理。RAW是传感器原始数据,信息完整但需后期处理;RGB直接对应显示,直观但数据量大;YUV通过亮色分离与色度下采样,在保证观感的前提下大幅提升传输与存储效率,是视频编码与流媒体的主流格式。理解其差异是图像处理与视频开发的基础。

e4f5g6h7的博客 516

【AI绘图进阶指南】Latent Diffusion Model核心组件解析——从理论到实践

本文深入解析Latent Diffusion Model(LDM)的核心组件,包括Autoencoder、Denoiser和Conditioning Encoder的工作原理及实践应用。通过理论结合代码示例,揭示LDM如何高效处理图像生成任务,并优化AI绘图流程,为开发者提供从理论到实践的进阶指南。

weixin_42628941的博客 387

在github下载的神经网络项目,如何运行?

【代码】在github下载的神经网络项目,如何运行?

weixin_50473876的博客 1546

基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践

本文详细介绍了基于STM32F4通用定时器实现Livox激光雷达PPS硬件同步的工程实践。通过分析PPS信号的时序要求,对比不同定时器的特性,并提供完整的代码实现与调试技巧,帮助开发者解决多传感器数据融合中的时间同步问题。实测表明,该方案在车载环境中稳定运行超过2000小时。

weixin_30540691的博客 327

简单的神经网络

定义一个简单的全连接神经网络模型,包含一个输入层、一个隐藏层和一个输出层。定义层数+定义前向传播顺序class MLP(nn.Module): # 定义一个多层感知机(MLP)模型,继承父类nn.Moduledef __init__(self): # 初始化函数super(MLP, self).__init__() # 调用父类的初始化函数# 前三行是八股文,后面的是自定义的self.fc1 = nn.Linear(4, 10) # 输入层到隐藏层。

zx15600886035的博客 642

毕设案例|保安公司智慧管理系统的建设与开发方案

"保安公司智慧管理系统是一款专为保安行业设计的高效信息化解决方案,其核心功能涵盖了从人力资源管理到业务运营的各个方面。系统以Java作为开发语言,结合SpringMVC框架,确保了稳定性和可扩展性,而MySQL数据库则提供了强大的数据存储和处理能力。首先,系统允许用户设置各类保安,如门卫、巡逻员等,实现精细化分类管理。其次,保安信息管理模块包括详细的人事档案、资格证书、培训记录等,便于人员追踪和考核。部门和城市设置方便公司层级管理和异地项目管理。岗位设置与时间安排精确到分钟,确保排班科学合理。

muyu2980的专栏 938

河洛理数【陈抟】先天命卦大运

首先我们把前文提及的天干和地支进行上下划分,那么每一年的年份都是使用一天干和一地支进行组合,即如上的甲子、癸亥,那么下一年就是天干和地支都进行顺延一位进行组合,如甲子年下一年就是乙丑年,但是由于天干是十个、地支有十二个,所以要遍历一遍的话,就正好是 60 年。1924 年 ~ 1983 年(中元) 1984 年 ~ 2043 年(下元) 2044 年 ~ 2103 年(上元)2、找到卦中第一个(从下往上,也就是初爻、二到五爻、上爻)对应时辰的阴阳爻。5、也就是所属的元堂爻。

Daniel专栏 2077

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

这个示例展示了如何定义一个具有一个隐藏层的前馈神经网络,并训练它来逼近一些随机生成的数据点。接收输入,应用权重并通过激活函数生成输出。下面是一个使用PyTorch构建简单。衡量模型预测与实际结果之间的差异。输入层、隐藏层和输出层。

🌟【AI炼丹师 | 你的数字技术搭子】 大二解锁3200+道友同行👾 2433

SO_KEEPALIVE、TCP_KEEPIDLE、TCP_KEEPINTVL、保活包

是一个套接字选项,用于设置是否启用 keepalive 机制。在这段代码中没有涉及到选项的设置。当被设置为非零值时,表示启用 keepalive 机制。keepalive 是一种用于检测连接是否仍然有效的机制。通过定期发送一些特定的探测数据,可以检测到网络连接的异常中断或对端应用程序的崩溃退出。为了避免以上情况,可以启用 keepalive 机制,即使在无数据传输的情况下也定期发送探测数据。如果在一定时间内没有收到对端的响应,就认为连接已经失效,并进行相应的处理。要启用选项,需要使用函数。其中,fd。

m0_46376834的博客 4818

搭建一个简单的神经网络

更多文章欢迎来我的小博客课程链接:【Siraj】 深度学习引论#2 如何做一个神经网络1 Intro to Deep Learning本周总结:神经网络是一种在数据中识别模式的算法反向传播是一种在更新权重的训练过程中采用的一种技术,这个过程使用的是梯度下降法。深度学习 = 多层神经网络 + 大数据 + 大量的计算实例课程实例中构建了一个最简单的单层神经网络,并且只含一个神经元。和吴恩达的第二周机器...

qq_31707969的博客 1万+

【硬刚Hadoop】HADOOP MAPREDUCE(1):概述

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2MapReduce优缺点 2.1 优点 1)MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式程序..

微信搜:import_bigdata,大数据领域硬核原创作者 464

【WRF数据介绍第二期】气象驱动场数据介绍及下载

【WRF数据介绍第二期】气象驱动场数据介绍及下载

WW、forever的博客 2160

神经网络的简单实现

神经网络的简单实现 引言 神经网络可能是听起来最高端的机器学习算法,本文将介绍简单的神经网络原理,并给出C++的参考代码 神经网络的原理 神经网络的基本原理 神经网络一般用于根据训练数据集 {xi,yi}i=1n\{x_i,y_i\}_{i=1}^n{xi​,yi​}i=1n​ 对于测试数据集 {xi′}\{x_i&#x27;\}{xi′​} 进行预测的问题,这里的 xi,yi,xi′x_...

qq_39515621的博客 463

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【机器学习】神经网络简介以及如何用Tensorflow构建一个简单的神经网络

神经网络是一种模拟人脑神经元连接和工作方式的计算模型,它是深度学习的基础,并在机器学习领域中扮演着重要角色神经网络是一种高效的机器学习工具,通过模拟人脑的神经网络结构和功能,实现了对复杂数据的处理和模式识别运行上述代码,你需要有TensorFlow环境由于MNIST数据集已经过时,TensorFlow可能在未来版本中将其移除,因此建议使用或其他数据集来替换已在 Tensorflow 中构建了一个小型神经网络,该网络展示了神经网络通过将决策划分到多个单元来处理复杂决策的能力。

ya的博客 1632

IDEA的使用指南

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

[由浅入深理解神经网络] 1 一个简单到极致的神经网络

通过一个简单的线性回归问题,介绍了神经网络的基本概念和训练过程

qq_39430657的博客 2100

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

简单神经网络实战

写一个最简单的神经网络项目

qq_39379074的博客 1337

基于简单神经网络的线性回归

pythonself.w = np.random.randn() # 权重self.b = np.random.randn() # 偏置return self.w * x + self.b # 前向传播return np.mean((y_true - y_pred) **2) # 均方误差dw = -2 * np.mean(x * (y_true - y_pred)) # 权重的梯度db = -2 * np.mean(y_true - y_pred) # 偏置的梯度。

weixin_69327572的博客 1268
上一篇: SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \UX
下一篇: 图神经网络
人生无根蒂,飘如陌上尘
博客等级 码龄9年 224粉丝 228原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值