深度学习:手写感知机

深度学习入门:从零实现神经网络,理论与实践结合的学习路径 深度学习作为人工智能的核心技术,其基本原理是通过神经网络模拟人脑的学习机制。从感知机到深度网络,核心在于前向传播和反向传播的数学原理,其中梯度下降算法通过链式法则实现参数优化。掌握这些基础概念对理解现代AI系统至关重要,能够帮助开发者构建图像识别、自然语言处理等实际应用。本书通过Python和NumPy实现,让读者亲手编写神经网络代码,避免直接使用复杂框架带来的黑箱问题。这种从第一性原理出发的学习方法,特别适合解决模型训练中损失不下降、梯度消失等常见问题。通过项目驱动的学习方式,读者能够自然理解反向传播、激 阅读详情

在这里插入图片描述

前言

上面是一只猫,人类的大脑可以很轻松地识别出。人脑是如何识别的呢?

人类能够识别出这只猫,是因为这张图片具有猫的典型特征。例如,猫的耳朵、眼睛、猫须、嘴巴等独特的形态特征,可以迅速引起大脑的注意和识别。当我们的大脑看到这些特征时,能够与之前的经验相匹配,从而判断出这是一只猫。

计算机是否可以模拟人脑的方式,判断出这是一只猫呢?

要让计算机模拟人脑的识别过程,首先需要了解人脑的基本工作原理。

一个刚出生的大脑虽然有一定的感知能力,但识别能力尚未完全发育。人类通过视觉、听觉、嗅觉、触觉和味觉等感官获取外界的信息,神经系统将这些信息传递给大脑中的特定区域进行处理。大脑通过分析和整合这些感知信息,逐步学习并记忆不同事物的特征。随着经验的累积,大脑能够更快、更精确地识别出熟悉的事物。

感知机

虽然人脑的识别过程极为复杂,但计算机可以通过一些方式来简单地模仿这一过程。感知机 就是一种可以模仿人脑的方案。

感知机的工作原理是:

  1. 接收输入的特征值
  2. 通过训练数据对特征值学习
  3. 根据之前的学习结果,对新输入的数据进行判断

由于感知机的学习能力较弱,只能处理较为简单的、线性可分的任务,即可以用一条直线将数据划分的任务。

例如,我们可以通过实现一个简单的感知机来识别图片是否为一只猫。

import numpy as np

class Perceptron:
    def __init__(self, input_size, lr=0.01):
        """
        初始化感知机模型,设置权重和偏置,并定义学习率。
        :param input_size: 输入特征的维度大小
        :param lr: 学习率
        """
        self.weights = np.random.randn(input_size) * 0.01  # 权重随机初始化为小值
        self.bias = 0  # 偏置初始化
        self.lr = lr  # 学习率

    def activation(self, z):
        """
        阶跃函数,用于二分类任务。
        :param z: 输入的加权和
        :return: 返回1(正类)或0(负类)
        """
        # 使用 NumPy 的向量化方式处理 z
        return np.where(z >= 0, 1, 0)

    def predict(self, x):
        """
        对给定的输入样本进行预测。
        :param x: 输入特征
        :return: 分类结果(1或0)
        """
        z = np.dot(x, self.weights) + self.bias  # 计算加权和
        return self.activation(z)

    def train(self, x_train, y_train, epochs=100):
        """
        训练感知机模型。
        :param x_train: 训练数据特征
        :param y_train: 训练数据标签
        :param epochs: 训练的迭代次数
        """
        for epoch in range(epochs):
            total_error = 0  # 每个 epoch 初始化总误差
            for i in range(len(x_train)):
                x = x_train[i]
                y = y_train[i]
                y_pred = self.predict(x)
                error = y - y_pred
                total_error += np.abs(error)  # 计算绝对误差

                # 根据误差更新权重和偏置
                self.weights += self.lr * error * x
                self.bias += self.lr * error
            
            # 每个 epoch 完成后打印总误差
            print(f'Epoch {epoch + 1}/{epochs}, Total Error: {total_error}')

模型训练

感知机就如同人类的大脑,通过学习之后会掌握一些能力。为了让这颗人造的“大脑”能够识别猫,我们可以让感知机不断地学习猫的特征。

这里有几个关键点:

  1. 计算机如何读取猫的特征
  2. 计算机应该读取哪些特征

计算机并没有眼睛,不能像人类一样用眼睛观察猫。为了解决这个问题,我们可以给猫拍照,然后让计算机通过图片来学习猫的特征。

但是,只依赖少量图片进行学习,感知机可能无法很好地识别猫的特征。类似于我们初次进入动物园时,需要多次观察猴子和狒狒才能区分它们的不同。为了简化这一过程,我们可以采用 CIFAR-10 数据集,这个数据集包含了数千张图片,包括我们需要的猫的图片。

有了数据,我们就可以开始使用感知机进行训练了。感知机不会自动知道哪些特征重要。因此,它只会根据输入的数值化特征进行学习。这个过程称为 特征提取。

在训练过程中,感知机会尝试调整它的权重来找到一个能够将猫与其他动物区分开的 分类边界。在这个例子中,我们进行了 10 次训练,然后将训练的结果存储起来。不过,由于感知机只适用于线性可分的任务,如果图片中的猫和其他物体的特征无法用线性方式区分,感知机将无法很好地完成识别任务。

import joblib
from tensorflow.keras.datasets import cifar10
from perceptron_model import Perceptron
from sklearn.preprocessing import StandardScaler
import numpy as np
import time

# 第1步:加载 CIFAR-10 数据集
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# 第2步:定义猫的标签
cat_label = 3

# 第3步:预处理数据
x_train_flat = x_train.reshape(x_train.shape[0], -1)  # 展平图像
x_test_flat = x_test.reshape(x_test.shape[0], -1)

# 使用 StandardScaler 进行标准化
scaler = StandardScaler()
x_train_scaled = scaler.fit_transform(x_train_flat)
x_test_scaled = scaler.transform(x_test_flat)

y_train_cat = (y_train == cat_label).astype(int).flatten()
y_test_cat = (y_test == cat_label).astype(int).flatten()

# 第4步:初始化感知机并训练模型
input_size = x_train_scaled.shape[1]  # 输入特征维度
perceptron = Perceptron(input_size, lr=0.01)
perceptron.train(x_train_scaled, y_train_cat, epochs=10)

# 第5步:模型评估(使用批处理提高效率)
predictions = perceptron.predict(x_test_scaled)
accuracy = np.mean(predictions == y_test_cat)
print(f"模型在测试集上的准确率: {accuracy:.2f}")

# 第6步:保存模型
model_data = {
    'weights': perceptron.weights,
    'bias': perceptron.bias,
    'scaler': scaler,
    'version': '1.0',
    'train_time': time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()),
    'test_accuracy': accuracy,
    'hyperparameters': {'learning_rate': 0.01, 'epochs': 10}
}

try:
    joblib.dump(model_data, 'perceptron_cat_model_v1.pkl')
    print("模型已保存!")
except Exception as e:
    print(f"模型保存失败: {e}")

模型训练结果:

模型预测

我们创建的大脑——感知机,已经学习了猫的特征。现在,我们可以使用它所学习的结果来识别一张新的猫的图片。

首先,我们从 CIFAR-10 数据集中取出一张猫的图片。因为感知机只能处理数值化的特征,我们需要先将这张图片转化为感知机可以理解的形式,例如将图像的像素值展平成一维数组。接下来,启动感知机并加载之前保存的训练结果。

感知机通过已经学到的权重和线性分类器,对输入的图像数据进行计算。它将判断这张图片是否符合之前所学习到的“猫”的特征。如果符合,它会将这张图片判断为猫,否则会判断为其他类别。

import numpy as np
import joblib
from tensorflow.keras.datasets import cifar10
from perceptron_model import Perceptron
import logging

logging.basicConfig(level=logging.INFO)

def preprocess_image(image, scaler):
    image_flat = image.reshape(1, -1)
    image_scaled = scaler.transform(image_flat)
    return image_scaled

def is_cat(image, model, scaler):
    image_scaled = preprocess_image(image, scaler)
    prediction = model.predict(image_scaled[0])
    logging.info(f"模型预测输出: {prediction}")
    return prediction == 1

def load_model(filepath='perceptron_cat_model_v1.pkl'):
    try:
        model_data = joblib.load(filepath)
        return model_data
    except FileNotFoundError:
        logging.error("模型文件未找到,请检查路径。")
        return None
    except Exception as e:
        logging.error(f"模型加载失败: {e}")
        return None

def evaluate_model(model, scaler, images, labels):
    predictions = [is_cat(img, model, scaler) for img in images]
    accuracy = np.mean(predictions == (labels == 3))
    logging.info(f"模型准确率: {accuracy * 100:.2f}%")
    return accuracy

# 加载 CIFAR-10 数据集
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# CIFAR-10 类别索引
cat_class_index = 3
cat_images = x_test[y_test.flatten() == cat_class_index]

# 加载保存的模型
model_data = load_model('perceptron_cat_model_v1.pkl')
if model_data is None:
    raise Exception("模型加载失败")

# 恢复模型和预处理器
perceptron = Perceptron(input_size=3072)
perceptron.weights = model_data['weights']
perceptron.bias = model_data['bias']
scaler = model_data['scaler']

# 评估模型
evaluate_model(perceptron, scaler, cat_images, y_test[y_test.flatten() == cat_class_index])

# 选择一张图片进行预测
test_image = cat_images[0]
if is_cat(test_image, perceptron, scaler):
    print("这是一张猫的图片!")
else:
    print("这不是猫的图片。")

模型识别结果:

小结

感知机是一种早期模拟大脑工作机制的模型,尽管它为人工智能带来了重要的启示,但也存在明显的局限性。比如,它的模拟能力不够准确,无法有效处理复杂问题。然而,感知机依然为我们探索更复杂的人工智能模型奠定了基础。

在这里插入图片描述

NoC架构深度解析:从拓扑结构到流量控制的全面指南 本文深入解析了片上网络(NoC)架构,从总线架构的瓶颈出发,阐述了NoC作为芯片内部“交通网”的核心优势。文章详细探讨了主流拓扑结构(如Mesh、Torus、Ring)的选型权衡,并系统介绍了数据包格式、路由算法、路由器流水线、流量控制机制以及网络接口(NI)设计,为理解现代多核SoC的通信基石提供了全面指南。 阅读详情

相关推荐

Rider高效调试UE引擎:无需编译源码的符号配置指南

本文提供了一份详尽的Rider高效调试UE引擎指南,核心在于无需编译源码即可配置调试符号。通过Epic启动器下载官方PDB文件,并在Rider中正确配置外部符号服务器路径,开发者能在10分钟内实现对引擎内部代码(如AActor::Tick)的源码级断点调试、变量查看和调用堆栈分析,极大提升问题排查效率。

weixin_29011239的博客 340

手写感知机(基于python)

某大厂面试居然要求手写感知机?

weixin_57005504的博客 1041

MT25QL256完整操作指南:从ID读取到4KB扇区擦除(附华大SPI例程)

本文提供了MT25QL256 NOR FLASH在华大MCU上的完整驱动开发指南。内容涵盖从SPI初始化、器件ID读取、状态寄存器查询,到核心的页编程和4KB扇区擦除操作,并分享了构建健壮驱动框架、处理跨页写入及常见调试问题的实战经验。

tt34567的博客 886

【机器学习入门】识别手写数字——感知机

当感知机训练完成后,我们把每个像素点对应的权值重新按照像素点位置排列起来,将权值大小转换为颜色(权值越小颜色越偏向红色,权值越大颜色越偏向蓝色,中间值为白色),就可以观察到感知机是如何工作的了。最终,这行代码打印出一个列表,列表中的每个元素都是一个字符串,代表out数组第i行中的一个输出值,格式化为保留两位小数的浮点数。将这些感知机的权值画成图像,可以明显地看到,权值的分布大体反映了数字笔画的平均走向,我们依稀可以从中看出数字的轮廓,如图3.8所示。对角线输出值较大,说明对应的感知机识别出了图片中的数字。

m0_53294028的博客 1676

ESP32开发环境与微信小程序通信的完整示例

通过搭建稳定的esp32开发环境,实现其与微信小程序间的双向通信,涵盖Wi-Fi连接、数据收发与协议设计,为物联网应用提供低成本解决方案。

weixin_42126677的博客 1130

带挂牵引车前向运动模型推导及仿真实现

牵引车-半挂车的车辆结构与普通的车辆相比增加了一个半挂车,它们之间通过鞍座相连接,为了分析半挂牵引车运动过程中的位姿和状态,本文将基于车辆的机械结构建立对应的运动学模型,该模型基于以下假设: 车辆行驶过程中,道路平坦且无凸凹; 车辆低速行驶,且运行过程中车身无侧倾和俯仰运动; 车辆行驶过程中,轮胎无形变,无侧向滑动,且无侧向力; 牵引车和半挂车均满足阿克曼转向几何原理; 牵引车与半挂车不会发现折叠。

jianmo的博客 3181

从零开始:用Python手写感知机算法(附原始形式与对偶形式对比)

本文从零开始,详细讲解了如何用Python手写感知机学习算法,并深入对比了原始形式与对偶形式的实现原理、代码差异及应用场景。通过实战演示与可视化,帮助读者透彻理解感知机作为线性分类基石的核心思想,掌握两种形式在计算效率与内存占用上的权衡,为后续学习神经网络与核方法打下坚实基础。

n8m7b6v5c4的博客 427

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

感知器(perceptron)模型分析及实现

1. 感知器模型 2. 几何意义 3. 感知器模型的训练 4. 批处理训练过程 4.1 训练数据的规范化 4.2 批处理感知器算法 实现代码

zfoox的摘记 6306

国科大作业考试资料《人工智能原理与算法》2024新编-第二次作业整理

1、对于下列活动,分别给出任务环境的PEAS描述, 并按2.3.2节列出的性质进行分析: 3、为图2.2中描述的吸尘器世界实现一个可以进行性能度量的环境模拟器。你的实现是必须是模块化的,以使传感器、执行器和环境特征(大小、形状、灰尘放置等)便于修改。 4、实现上述题目真空吸尘器环境中的简单反射Agent。用所有可能的初始灰尘分布和Agent位置,运行环境模拟器和Agent。记录Agent在每种情况下的性能评分和总体平均评分。

MatsumotoChrikk 1187

vue2/3 - [超详细] 实现企业微信扫码登录完整流程及代码,vue项目接入企业微信扫码登录功能教程,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码注释,一键复制开箱即用)

vue企业微信扫码登录,vue网页网站企业微信扫码登录教程,vue如何实现企业微信扫码登录功能,vue详细企业微信扫码登录功能实现,vue2实现企业微信扫码登录,前端vue企业微信扫码登录教程,vue pc电脑端企业微信扫码登录详细教程,vue项目中怎么做企业微信扫码注册登录,vue实现网站接入企业微信扫码登录,vue2做企业微信扫码登录的优质文章教程,vue网站对接企业微信扫码登录,vue企业微信扫码登录如何新开一页全屏显示登录二维码,vue企业微信登录二维码 内嵌在div容器里/跳页显示登录二维码,vu

✅ 精选推荐文章 5700

感知机参数更新策略

逐个数据训练(在线学习)通常会更灵活,适合在线学习和内存受限的情况,但收敛较慢,且训练过程可能较不稳定。批量训练(批量学习)则更加稳定和高效,但需要较多的内存和计算资源。小批量训练(Mini-batch)可以平衡速度和稳定性,是最常用的一种方法,尤其在深度学习中。

m0_53605808的博客 841

Cadence Orcad Capture原理图断线的检查与避免方法

在设计电路图中,尤其是直接借鉴别人的设计进行二次开发的过程中难免会遇到如下尴尬的情况。有没有眼神好的朋友发现图纸的哪里有不对劲的地方呢?

fydar的博客 3267

深度学习实验:多层感知机实现手写数字识别

代码中的-1e10代表一个非常小的负数,它用于np.clip函数,以限制数组中的值在一个指定的范围内。如果激活函数是’relu’,则使用np.maximum返回ReLU激活的结。总体来看,对比Sigmoid和ReLU激活函数发现,ReLU函数的loss与准确率要显著优于。在超参数的调节方面,在初始超参数上模型的准确率在0.7—0.8之间浮动,不是很理想,3.构造具有两个隐含层的多层感知机,自行选取合适的激活函数和损失函数,与只有一个。值,之后的测试中,明显发现模型的波动减小了,但准确率还是差强人意。

2302_81399692的博客 850

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

手写可调试感知机:NLP深度学习的底层诊断工具

感知机是神经网络最基础的线性分类模型,其核心原理——加权求和加偏置、激活函数映射、梯度驱动更新——构成了现代NLP中Linear层、Attention评分、Embedding查表等关键操作的数学内核。它并非过时概念,而是BERT分类头、self-attention标量计算、tokenizer到模型数值转换的底层计算范式。掌握感知机的权重初始化、bias先验校准、输入尺度敏感性等特性,能直接提升文本分类准确率、定位梯度消失与loss异常,并支撑决策边界可视化与生产级调试。本文聚焦PyTorch手写可追踪、可监

chenzhuofei4155的博客 439

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Flux.jl 深度学习终极指南:使用多层感知机实现MNIST手写数字分类

Flux.jl 是一个纯 Julia 编写的机器学习库,它让你能够轻松构建深度学习模型而无需担心张量操作的复杂性。Flux.jl 的核心优势在于其简洁的API设计和强大的自动微分能力,让深度学习变得简单直观。 在这篇完整的Flux.jl教程中,我们将深入探讨如何使用多层感知机(MLP)来实现经典的MNIST手写数字分类任务。无论你是Julia新手还是深度学习初学者,这个指南都将帮助你快速掌握Fl

gitblog_00273的博客 520

深度学习工具包 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")

【驭风计划 深度学习】实训2:构建自己的多层感知机: MNIST手写数字识别

MNIST手写数字识别数据集是图像分类领域最常用的数据集之一,它包含60,000张训练图片,10,000张测试图片,图片中的数字均被缩放到同一尺寸且置于图像中央,图片大小为28×28。注意:此处的softmax损失层与案例1中有所差异,本次案例中的softmax层不包含可训练的参数,这些可训练的参数被独立成一个全连接层。l 本案例中给定的超参数可能表现不佳,请自行调整超参数尝试取得更好的结果,记录下每组超参数的结果,并作比较和分析。本案例提供了初始代码,可基于初始代码完成,配置环境要求与案例1相同。

Mege1的博客 437

手写感知机:NLP深度学习的最小可运行神经元

感知机是神经网络最基础的计算单元,其核心原理——加权求和、非线性激活、梯度更新——构成了所有深度学习模型的底层逻辑。理解它,本质是掌握从输入向量到分类决策的完整映射机制。在NLP任务中,感知机不再局限于二维几何直觉,而是演变为处理词向量、句向量等高维稀疏表示的可训练模块,支撑情感分析、意图识别等典型场景。它通过sigmoid激活输出概率、结合二元交叉熵损失实现端到端优化,成为连接传统特征工程与现代深度模型的关键锚点。本文聚焦NLP实战语境,以NumPy手写实现为载体,还原前向传播与反向传播的每一步物理意义,

weixin_30562507的博客 394

深度学习神经网络实战:多层感知机,手写数字识别

利用tensorflow.js训练模型,搭建神经网络模型,完成手写数字识别。

止水 929

李宏毅ML笔记6: 深度学习简介

DL的沉沉浮浮 DL三步骤 1. 定义函式集 全连接前馈网络 矩阵运算 Output Layer 手写数字识别例子 2.定义函式好坏 3. 找最好的函式

越开源越幸运 636

PyTorch Lightning 入门:从感知机到 MLP,AI Academy 深度学习实战指南

想学深度学习却总被冗长的样板代码劝退?**PyTorch Lightning 入门**正是为你量身定制的低门槛路线。这篇实战指南来自 Weights & Biases 官方教育项目 AI Academy(edu 仓库),带你用三个可运行的 Jupyter Notebook,从最朴素的**感知机**一路走到能识别 0-9 十个数字的**MLP 多层感知机**。全程使用 MNIST 手写数字数据集,无

gitblog_00075的博客 223

Paddlepaddle Tutorial - 手写数字识别笔记 (using MNIST)

##基于MNIST数据库上的手写识别问题 -大部分内容来自网站https://www.paddlepaddle.org.cn/documentation/docs/zh/user_guides/simple_case/recognize_digits/README.cn.html MNIST数据集 作为一个简单的计算机视觉数据库,包含一系列手写数字图片和对应的标签。图片是28*28的像素矩阵,标签对应0~9,每张图片都经过了大小归一化和居中处理。 MNIST数据集从NIST的Special Dat

BachelorSC ' s Notes 400

李宏毅机器学习笔记(7):Deep Learning

1 前言 对于深度学习(神经网络)的应用,在目前这个时间段来说,使用对象,发展研究实在是太多了。这也可以算是这个时代非常热门的一项技术了。 这里可以看一下,图1-1了解下深度学习的历史上的起伏。 图1-1 深度学习的历史上的起伏 可以看到58年提出感知机后由于有人提出了感知机受限后就冷下去了,后经历了一些起伏直到06年的RBM(受限玻尔兹曼机...

wasser000的博客 503

【2021.07】datawhale组队学习李宏毅task04

文章目录深度学习的发展趋势深度学习的三个步骤Step1:神经网络完全连接前馈神经网络全链接和前馈的理解深度的理解矩阵计算本质:通过隐藏层进行特征转换示例:手写数字识别Step2:模型评估Step3:选择最优函数反向传播思考隐藏层越多越好?普遍性定理 本笔记为datawhale7月组队学习笔记,视频链接:李宏毅《机器学习》 p13深度学习 开源文档:深度学习 深度学习的发展趋势 回顾一下deep learning的历史: 1958: Perceptron (linear model) 1969: Perce

Mounvo的博客 380

深度学习入门第一课——神经网络实现手写数字识别

这篇文章介绍了使用PyTorch实现手写数字识别的深度学习项目。主要内容包括:1) 导入MNIST数据集并展示样本;2) 构建一个包含两个隐藏层的全连接神经网络,使用ReLU激活函数;3) 采用交叉熵损失函数和Adam优化器;4) 实现训练和测试过程,通过10次迭代使准确率从87%提升到95%。文章详细解释了关键代码和深度学习概念,如数据预处理、神经网络结构、激活函数选择等,适合初学者理解深度学习的基本实现流程。

weixin_73958875的博客 1477

【耿直哥深度学习】4-4-多层感知机代码实现

MLP的核心是全连接层+激活函数,通过非线性映射实现复杂分类,是深度学习最基础的神经网络结构;深度学习训练流程固定为:前向传播→计算损失→梯度清零→反向传播→参数更新,测试阶段需禁用梯度计算;CrossEntropyLoss+Adam是多分类任务的经典组合,MNIST数据集是入门CV分类任务的首选数据集。

Charlie482的博客 648
上一篇: SpringBoot:让开发更加简单
下一篇: 了解 Redis 底层的秘密:从 SDS 动态扩展到内存优化
知行小栈
博客等级 码龄9年 2506粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值