神经网络基础-从零开始搭建一个神经网络

VIP神经网络基础-从零开始搭建一个神经网络
人工神经网络(Articial Neural Network,简写为ANN)也称为神经网络(NN),是一种模仿生物神经网络和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成,各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。人工神经网络也是类似,通过模仿人脑的“学习机器”,通过不断“看”数据(比如图片,数字),自己总结规律,最终学会预测(比如分类图片)在深度学习中,损失函数是用来衡量模型参数的质量的函数,衡量的方式是比较网络输出和真实输出的差异。
开通可读全文 ·4k 人阅读
最低0.47元/天 解锁文章

        

一、什么是神经网络

人工神经网络(Articial Neural Network,简写为ANN)也称为神经网络(NN),是一种模仿生物神经网络和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成,各个神经元传递复杂的电信号,树突接收到输入信号,然后对信号进行处理,通过轴突输出信号。人工神经网络也是类似,通过模仿人脑的“学习机器”,通过不断“看”数据(比如图片,数字),自己总结规律,最终学会预测(比如分类图片)

1.1、如何构建人工神经网络中的神经元

神经元=输入X权重+偏置->激活函数

权重:调节每个输入的重要性(类似音量旋钮)

偏置:调整输出的基准线(比如天生爱吃甜食)

激活函数:决定是否触发输出(比如及格线60分)

权重和偏置怎么来的?

一开始随机初始化,训练时通过数据自动调整到最优值

1.1、神经网络

使用多个神经元来构建神经网络,相邻之间的神经元相互连接,并给每一个连接分配一个强度,如下图:

神经网络中信息只向一个方向移动,即从输入节点向前移动,通过隐藏节点,再向输出节点移动,神经元的三层结构:

输入层:

  • 像眼睛一样接受数据,比如输入一张3个数字的表格(比如身高,体重,年龄)
  • 代码层面对应的是:my_data = torch.randn(5,3)生成一个5行3列的随机数据(5个人,每人3个特征)

隐藏层

  • 像大脑一样处理数据,图中有两层“脑细胞”(Hidder Layer1和Hidden Layer2)

输出层:

  • 像“嘴巴”一样给出答案,比如输出两个结果,y1,y2

1.2、神经网络的特点:

  • 同一层的神经元之间没有连接。
  • 第N层的每个神经元和第N-1层的所有神经元相连(full conneted的含义),这就是全连接神经网络
  • 第N-1层神经元的输出就是第N层神经元的输入
  • 每个连接都有一个权重值(w系数和b系数)

深度学习与机器学习的关系

深度学习是机器学习的一个分支,深度学习用多层神经网络(尤其是深层的网络)来学习数据,自动从数据中提取复杂特征,不用人工设计规则。

二、激活函数

激活函数用于对每层的输出数据进行变换,进而为整个网络注入非线性因素,此时,神经网络就可以拟合各种曲线,没有引入非线性因素的网络等价于使用一个线性模型来拟合

通过给网格输出增加激活函数,实现引入非线性因素,使得网络模型可以逼近任意函数,提升网络对复杂问题的拟合能力

2.1、常见的激活函数

1、sigmoid激活函数
  • 可以将任意的输入映射到(0,1)之间,当输入的值大致在<-6或者>6时,意味着输入任何值得到的激活值都是差不多的,这样会丢失部分信息
  • 对于sigmoid函数而言,输入值在[-6,6]之间输出值才有明显差异,输入值在[3,-3]之间才会有比较好的效果
  • sigmoid网络在5层之内就会产生梯度消失现象,该激活函数并不是以0为中心的,在实践中这种激活函数使用的很少,一般只用于二分类的输出层

2、tanh激活函数

  • Tanh 函数将输入映射到 (-1, 1) 之间,图像以 0 为中心,在 0 点对称,当输入 大概<-3 或者>3 时将被映射为 -1 或者 1。其导数值范围 (0, 1),当输入的值大概 <-3 或者 > 3 时,其导数近似 0
  • 与 Sigmoid 相比,它是以 0 为中心的,且梯度相对于sigmoid大,使得其收敛速度要比Sigmoid 快,减少迭代次数。然而,从图中可以看出,Tanh 两侧的导数也为 0,同样会造成梯度消失
  • 若使用时可在隐藏层使用tanh函数,在输出层使用sigmoid函数
3、softMax激活函数

softMax用于多分类过程中,是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展示出来,将网络输出的logits通过softMax函数,映射成为(0,1)的值,这些值的累加和为1,选取概率最大的节点,作为我们的预测目标类别

4、ReLU激活函数

ReLU 激活函数将小于 0 的值映射为 0,而大于 0 的值则保持不变,它更加重视正信号,而忽略负信号,这种激活函数运算更为简单,能够提高模型的训练效率。

当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。

ReLU是目前最常用的激活函数。与sigmoid相比,RELU的优势是:

采用sigmoid函数,计算量大(指数运算),反向传播求误差梯度时,计算量相对大,而采用

Relu激活函数,整个过程的计算量节省很多。 sigmoid函数反向传播时,很容易就会出现梯度

消失的情况,从而无法完成深层网络的训练。 Relu会使一部分神经元的输出为0,这样就造成了

网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生

2.2、激活函数的选择方法

对于隐藏层:

  1. 优先选择ReLU激活函数
  2. 如果ReLu效果,可以尝试选择其他激活,如Leakly ReLu等
  3. 如果你使用了ReLU, 需要注意一下Dead ReLU问题, 避免出现大的梯度从而导致过多的神经元死亡。
  4. 少用使用sigmoid激活函数,可以尝试使用tanh激活函数

对于输出层:

  1. 二分类问题选择sigmoid激活函数
  2. 多分类问题选择softmax激活函数
  3. 回归问题选择identity激活函数
2.3、参数初始化
  • 均匀分布初始化

权重参数初始化从区间均匀随机取值。即在(-1/√d,1/√d)均匀分布中生成当前神经元的权重,其中d为每个神经元的输入数量

  • 正态分布式初始化

随机初始化从均值为0,标准差是1的高斯分布中取样,使用一些很小的值,对参数W进行初始化

  • 全0初始化

将神经网络中的所有权重参数初始化为0

  • 全1初始化

将神经网络中的所有权重参数初始化为1

  • 固定值初始化

将神经网络中的所有权重参数初始化为某个固定值

  • kaiming初始化,也叫做HE初始化

HE 初始化分为正态分布的 HE 初始化、均匀分布的 HE 初始化

正态化的he初始化

stddev = sqrt(2 / fan_in)

均匀分布的he初始化

它从 [-limit,limit] 中的均匀分布中抽取样本, limit是 sqrt(6 / fan_in)

fan_in输入神经元的个数

xavier初始化,也叫做Glorot初始化

该方法也有两种,一种是正态分布的 xavier 初始化、一种是均匀分布的 xavier 初始化

正态化的Xavier初始化

stddev = sqrt(2 / (fan_in + fan_out))

均匀分布的Xavier初始化

[-limit,limit] 中的均匀分布中抽取样本, limit 是 sqrt(6 / (fan_in + fan_out))

fan_in是输入神经元的个数,fan_out是输出的神经元个数

初始化代码:

import torch
import torch.nn.functional as F
import torch.nn as nn

#1. 均匀分布随机初始化
def test01():
    print(f"均匀分布随机初始化{'='*30}均匀分布随机初始化")
    linear = nn.Linear(5,3)
    nn.init.uniform_(linear.weight)
    print(linear.weight.data)

# 2、固定初始化
def test02():
    print(f"固定初始化{'='*30}固定初始化")
    linear = nn.Linear(5,3)
    nn.init.constant_(linear.weight,5)
    print(linear.weight.data)

#3、全0初始化
def test03():
    print(f"全0初始化{'='*30}全0初始化")
    linear = nn.Linear(5,3)
    nn.init.zeros_(linear.weight)
    print(linear.weight.data)

def test04():
    print(f"全1初始化{'='*30}全1初始化")
    linear = nn.Linear(5,3)
    nn.init.ones_(linear.weight)
    print(linear.weight.data)
#适合从正态分布 N(mean,std^2) 采样权重。
#需手动调整方差,适合浅层网络或特定分布假设
def test05():
    print(f"正态分布随机初始化{'='*30}正态分布随机初始化")
    linear = nn.Linear(5,3)
    # mean:均值,默认0
    #std 标准差,默认1
    nn.init.normal_(linear.weight,mean=0,std=1)
    print(linear.weight.data)

#6、kaiming 初始化
#针对ReLU族激活函数设计,根据输入/输出维度调整方差
#适合深层网络(如CNN)、ReLU/Leaky ReLU激活函数
def test06():
    print(f"kaiming正态分布初始化{'='*30}kaiming正态分布初始化")
    #kaiming正态分布初始化
    linear = nn.Linear(5,3)
    nn.init.kaiming_normal_(linear.weight)
    print(linear.weight.data)

    print(f"kaiming均匀分布初始化{'='*30}kaiming均匀分布初始化")
    #kaiming均匀分布初始化
    linear = nn.Linear(5,3)
    #nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')
    #mode:fan_in(前向传播,默认)或 fan_out(反向传播)
    #nonlinearity:激活函数类型(如 relu, leaky_relu)
    nn.init.kaiming_normal_(linear.weight)
    print(linear.weight.data)

    #kaiming均匀分布初始化
    linear = nn.Linear(5,3)
    nn.init.kaiming_uniform_(linear.weight)
    print(linear.weight.data)

#7xavier初始化
#正态分布:nn.init.xavier_normal_(tensor, gain=1.0)
#均匀分布:nn.init.xavier_uniform_(tensor, gain=1.0)
#保持输入输出方差一致,适用于对称激活函数(如tanh、sigmoid)
#gain:根据激活函数调整的缩放因子(如tanh的gain=5/3)
def test07():
    print(f"xavier正态分布初始化{'='*30}xavier正态分布初始化")
    #xavier正态分布初始化
    linear = nn.Linear(5,3)
    nn.init.xavier_uniform_(linear.weight)
    print(linear.weight.data)
    
    print(f"xavier均匀分布初始化{'='*30}xavier均匀分布初始化")
    liner = nn.Linear(5,3)
    nn.init.xavier_uniform_(linear.weight)
    print(linear.weight.data)

if __name__ =="__main__":
    test01()
    test02()
    test03()
    test04()
    test05()
    test06()
    test07()
    

输出结果:

均匀分布随机初始化==============================均匀分布随机初始化
tensor([[0.6716, 0.1197, 0.7008, 0.0801, 0.8953],
        [0.0483, 0.4593, 0.5607, 0.2824, 0.1307],
        [0.5942, 0.7758, 0.1852, 0.8597, 0.5166]])
固定初始化==============================固定初始化
tensor([[5., 5., 5., 5., 5.],
        [5., 5., 5., 5., 5.],
        [5., 5., 5., 5., 5.]])
全0初始化==============================全0初始化
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])
全1初始化==============================全1初始化
tensor([[1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.],
        [1., 1., 1., 1., 1.]])
正态分布随机初始化==============================正态分布随机初始化
tensor([[-1.0910, -0.4724, -0.6468, -0.0121, -1.1449],
        [ 0.6663, -0.1809,  1.1174,
VIP 神经网络入门指南:从零开始的深度学习之旅 (三)机器学习基础(二)实践操作(三)持续学习与拓展。 开通可读全文·2.1k 阅读·40 点赞·24 收藏 阅读全文

相关推荐

神经网络入门(Neural Network)

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。 一、前言 1、分类 神经网络最重要的用途是分类,为了让大家对分类有个直观的认识,先看几个例子: 垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里,机器需要判断这封邮件是否是垃圾邮件。 疾病判断:病人到医院去做了一大堆肝功、尿检测验,把测验结果送进一个机器里,机器需要判断这个病人是否得病,得的什么病。 猫狗分类:有一大堆猫、狗照片,把每一张照片送进一个机器里,机器需要判断这幅

DreamBro的博客 3393

神经网络原理&一个简单的神经网络模型搭建

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

N2O_666的博客 9539

PyTorch入门:从零开始搭建你的第一个神经网络

接下来,我们定义一个简单的全连接神经网络。PyTorch提供了`torch.nn.Module`类,所有神经网络模型都继承自这个类。

saluteSIWU的博客 930

手撕神经网络:从零开始实现一个简单的神经网络(python)

手撕神经网络:从零开始实现一个简单的神经网络 1. 前言 现在有很多深度学习平台可以用,甚至我们根本不需要知道网络背后是怎么运行的,就可以训练出我们想要的模型,但是从学习的角度,从零开始写一个简单的神经网络是有必要的,它将有助于理解神经网络的工作原理。 之前有写过基于 TF 的全连接神经网络的实现,可以参考深度学习笔记——全连接神经网络样例程序及详细注释。但是这里将不借助任何深度学习平台来实现一个...

生命在于折腾! 2416

神经网络的搭建过程描述,从零开始搭建神经网络

基本上,神经网络是由一层一层的不同的计算单位连接起来的。我们把计算单位称为神经元,这些网络可以把数据处理分类,就是我们要的输出。

wenangou的博客 2155

零基础入门深度神经网络,从零开始搭建神经网络

神经网络的学习主要是指使用学习算法来调整神经元间的连接权,使得网路输出更加符合实际。学习算法分为监督学习(SupervisedLearning)与无监督学习(UnsupervisedLearning)两类:1、有监督学习算法将一组训练集(TrainingSet)送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。有监督学习算法的主要步骤包括:a)从样本集合中取出一个样本(Ai,Bi);b)计算网络的实际输出O;c)求D=Bi–O;d)根据D调整权矩阵W;...

aifamao6的博客 860

车辆贷款违约预测挑战赛

2021科大讯飞-车辆贷款违约预测挑战赛--方案简介车贷违约预测问题,目的是建立风险识别模型来预测可能违约的借款人。预测结果为借款人是否可能违约,属于二分类问题。偏数据挖掘的比赛,关键点是如何基于对数据的理解抽象归纳出有用的特征。站在大佬的视角,尝试学习总结,站在巨人的肩膀上,也许看得会更远一些。直接进入主题,开始学习套路,芜湖~特征工程1、常用库、数据导入import pandas as pd import numpy as np import lightgbm as lgb import xgboost

平平淡淡,戒急用忍,一生学闭嘴。 3335

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8824

Unity 实战项目 ☀️| 只用一个脚本做一个 刮刮乐 案例,一不小心刮出来一个女朋友!【学习娱乐一下】

只用一个脚本做一个刮刮乐,一不小心刮出来一个女朋友!【学习娱乐一下!】

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

Python从0到100完整学习指南(必看导航)

想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学业升学和工作就业的先行者!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 6万+

Agent应用实践之三 - 基础:AgentScope-ReActAgent源码解析

本章通过总结AgentScope的核心类,再通过分析ReActAgent调用大模型的底层源码原理。使我们基本了解了Agent的基本原理,这个实现方式与OpenClaw使用pi-mono的Agent基础框架是一致的。了解完ReActAgent的基本原理,下一章我们会将一下SpringBoot集成方式的代码原理,这两章是我们构建后续内容的基本框架。

代码让AI扣 463

企业级大模型落地:私有化部署的安全合规全流程实战指南

摘要:本文针对企业在大模型私有化部署中面临的数据泄露、合规风险及系统稳定性难题,提出一套覆盖数据安全、模型合规、审计追踪与灾备方案的全流程解决方案。通过双加密管道(国密SM4传输加密+AES-GCM存储加密)、SGX可信执行环境等技术,实现数据全生命周期保护;结合等保2.0三级要求与《生成式AI服务管理暂行办法》,提供合规性实施细则;并给出本地GPU集群、混合云、边缘推理盒子三种企业级部署方案及成本模型。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 893

Calibre 3Dstack --每日一个命令day27【overlap】(3-27)

本文介绍了Calibre3Dstack中overlap命令的使用方法。该命令用于检查两个已放置层之间的重叠量是否符合要求,支持设置检查名称、层类型、堆叠范围、检查方向等参数。关键参数包括:-constraint指定重叠约束条件,-exact控制百分比精度,-by_area切换为面积检查模式,-intersection报告相交区域。检查结果可通过RVE选项定制显示方式,适用于3D堆叠设计中的层间重叠验证场景。

u013620135的博客 102

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

上一篇: 数组前缀和算法技巧
下一篇: 卷积神经网络-从零开始构建一个卷积神经网络

双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —
Zach_ZSZ
博客等级 码龄10年 91粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zach_ZSZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值