一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四)

这篇具有很好参考价值的文章主要介绍了一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

思索了很久到底要不要出深度学习内容,毕竟在数学建模专栏里边的机器学习内容还有一大半算法没有更新,很多坑都没有填满,而且现在深度学习的文章和学习课程都十分的多,我考虑了很久决定还是得出神经网络系列文章,不然如果以后数学建模竞赛或者是其他更优化模型如果用上了神经网络(比如利用LSTM进行时间序列模型预测),那么就更好向大家解释并且阐述原理了。但是深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。

现在很多竞赛虽然没有限定使用算法框架,但是更多获奖的队伍都使用到了深度学习算法,传统机器学习算法日渐式微。比如2022美国大学生数学建模C题,参数队伍使用到了深度学习网络的队伍,获奖比例都非常高,现在人工智能比赛和数据挖掘比赛都相继增多,对神经网络知识需求也日渐增多,因此十分有必要掌握各类神经网络算法。

博主专注建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏。

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理


输出层

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

神经网络在解决不同类型的问题时,使用不同的激活函数来适应任务的需求。对于分类问题和回归问题,我们选择了不同的策略来构建网络。

首先,让我们考虑分类问题。在分类问题中,我们常常面临将数据分成不同类别的挑战。对于二分类问题,这意味着我们需要将数据分为两个可能的类别。在这种情况下,我们选择使用 Sigmoid 函数作为输出层的激活函数。Sigmoid 函数能够将输出值映射到 0 到 1 之间,这使得我们可以将输出视为某个类别的概率。

而在处理多分类问题时,我们的目标是将数据分成多个可能的类别。这时,我们使用 Softmax 函数作为输出层的激活函数。Softmax 函数可以将每个类别的原始分数转换为表示各类别概率的形式。这使得我们能够确定哪个类别最有可能是给定输入的正确类别。

而在回归问题中,我们关心的是预测连续数值的输出,而不是离散的类别。在这种情况下,我们通常不使用激活函数,因为我们希望网络的输出可以取任意实数值,以便与问题的需求相匹配。

综上所述,神经网络在不同问题类型中的激活函数选择是根据问题的性质和目标而定的。通过选择适当的激活函数,我们能够更好地让网络适应不同类型的任务。

一、工作过程

为了方便理解,我们仍然以一个实际案例来进行,采用Softmax来进行多分类。

一个多分类问题,C=4.线性分类器模型最后的输出层包含了四个输出值,分别是:

经过Softmax处理后,数值转化为如下所示概率:

 很明显根据计算的概率我们很容易发现S2=0.8390对应的概率最大。Softmax将连续数值转化为相对概率,更利于我们理解。当然如果我们拿到的是[1000,1001,1002],我们会得到inf,如果是[-1000,-999,-1000]还是不行,也会得到-inf。

实际应用中,需要对V进行一些数值处理:即V中的每个元素减去V中的最大值。

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

def _softmax(x):
    c=np.max(x)
    exp_x = np.exp(x-c)
    return exp_x/np.sum(exp_x)

scores = np.array([123,456,789]) 
p = _softmax(scores)
print(p)

 以数值的形式计算可能有些抽象,那么我们以图片分类来举例:

假设我们把猫分为类1,狗为类2,小鸡为类3,如果不属于以上任何一类就分到“其他”,从左到右第一个图是一只小鸡,所以我们将它归为类3,以此类推:

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

假设我们输入一张猫的图片,其对应的真实标签是0100(类别已经转换成one-hot编码形式)。

真值y为其中,是1,其余的都是0,经过Softmax计算之后得到的是预测值y_predict,假设预测值为,它是一个包括总和为1的概率的向量,这样的话神经网络计算得到的结果告诉我们猫的概率值分配到20%。般来说,神经网络是将输出值最大的神经元所对应的类别作为识别结果,而且即使使用Softmax函数也只会改变值的大小而不能改变神经元的位置,另外指数函数的运算也需要一定的计算机运算量,因此可以考虑在多分类问题中省去Softmax函数。

二、输出层的神经元个数

输出层中神经元的数量应当根据解决问题的要求来选择。在处理不同问题时,输出层神经元的个数需要进行相应的设置。特别是在分类问题中,我们需要根据类别的数量来决定输出层的神经元数目。以 MNIST(手写数字识别)为例,这是一个将手写数字分为0到9共10个类别的问题,因此在输出层我们会设置10个神经元,每个神经元对应一个数字类别。

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

基于MNIST数据集的前向传播

MNIST(Modified National Institute of Standards and Technology)数据集是一个广泛应用于计算机视觉领域的经典数据集,用于手写数字识别任务。该数据集由美国国家标准与技术研究所(NIST)创建,并经过修改以便在机器学习研究中使用。

MNIST数据集包含了一系列的手写数字图像,涵盖了0到9的数字。每张图像的尺寸为28x28像素,以灰度图像的形式呈现。数据集共分为两部分:训练集和测试集。

训练集: 训练集包含了60,000张手写数字图像,每张图像都有对应的标签,指明该图像所表示的数字。这些图像和标签被广泛用于训练机器学习模型,特别是用于构建手写数字识别模型。

测试集: 测试集包含了10,000张手写数字图像,同样也带有对应的标签。这些图像用于评估已经训练好的模型在未见过数据上的性能。通过测试集的结果,可以了解模型的泛化能力和准确性。

通过torch直接下载即可:

#MNIST dataset
train_dataset = dsets.MNIST(root = '/ml/pymnist',  #选择数据的根目录
                            train = True,  #选择训练集
                            transform = None,  #不考#MNIST dataset
train_dataset = dsets.MNIST(root = '/ml/pymnist',  #选择数据的根目录
                            train = True,  #选择训练集
                            transform = None,  #不考虑使用任何数据预处理
                            download = True  #从网络上下载图片
                           )
test_dataset = dsets.MNIST(root = '/ml/pymnist',#选择数据的根目录
                           train = False,#选择测试集
                           transform = None, #不考虑使用任何数据预处理
                           download = True #从网络上下载图片
                          )虑使用任何数据预处理
                            download = True  #从网络上下载图片
                           )
test_dataset = dsets.MNIST(root = '/ml/pymnist',#选择数据的根目录
                           train = False,#选择测试集
                           transform = None, #不考虑使用任何数据预处理
                           download = True #从网络上下载图片
                          )

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

首先我们要初始化网络init_network函数,需要设置weight_scale变量用于控制随机权重,统一将bias设置为1.

def init_network():
    network={}
    weight_scale=1e-3
    network['W1']=np.random.randn(784,50)*weight_scale
    network['b1']=np.ones(50)
    network['W2']=np.random.randn(50,100)*weight_scale
    network['b2']=np.ones(100)
    network['W3']=np.random.randn(100,10)*weight_scale
    network['b3']=np.ones(10)
    return network

之后是进行前向传播过程,这里采用ReLU函数:

def _relu(x):
    return np.maximum(0,x)
def forward(network,x):
    w1,w2,w3 = network['W1'],network['W2'],network['W3']
    b1,b2,b3 = network['b1'],network['b2'],network['b3']
    a1 = x.dot(w1) + b1
    z1 = _relu(a1)
    a2 = z1.dot(w2) + b2
    z2 = _relu(a2)
    a3 = z2.dot(w3) + b3
    y = a3
    return y

最后我们计算得到最终结果:

network = init_network()
accuracy_cnt = 0
x = test_dataset.test_data.numpy().reshape(-1,28*28)
labels = test_dataset.test_labels.numpy() #tensor转numpy
for i in range((len(x))):
    y = forward(network,x[i])
    p = np.argmax(y) #获取概率最高的元素的索引
    if p == labels[i]:
        accuracy_cnt += 1
print("Accuracy:"+ str(float(accuracy_cnt)/len(x)*100)+'%')

一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四),神经网络,人工智能,深度学习,机器学习,自然语言处理

 因为是初始权重,故10分类猜对的概率为10%正常不过,因为我们只是前向传播,没有反向传播,故所有的bias权重都不是最优的。那么下一章我们将为反向传播做好准备,详细讲述一下损失函数的作用,在我之前的文章基本把所有的损失函数都讲了一遍,十分详细完善,推荐大家有能力阅读一下:

损失函数(Loss Function)一文详解-分类问题常见损失函数Python代码实现+计算原理解析

下篇文章着重将讲述实际案例中损失函数的使用以及功能。文章来源地址https://www.toymoban.com/news/detail-691479.html


到了这里,关于一文速学-让神经网络不再神秘,一天速学神经网络基础-输出层(四)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一文通俗入门·脉冲神经网络(SNN)·第三代神经网络

    原创文章,转载请注明出处: https://blog.csdn.net/weixin_37864449/article/details/126772830?spm=1001.2014.3001.5502 如上动态图所示,脉冲网络由脉冲神经元连接而成,脉冲神经元输入为脉冲,输出也是脉冲,脉冲神经元内部有电动势v,v在没有接收到任何输入时会随着时间指数衰减到某个稳定

    2023年04月09日
    浏览(40)
  • 一文精简介绍CNN神经网络

    “简 介: 这是 love1005lin 在CSDN上2021-11-19发布的一篇深度学习的卷积神经网,内容整理的精简,移动,现在将其进行转载,供大家参考。 01   基本原理 卷积神经网络的基本结构大致包括:卷积层、激活函数、池化层、全连接层、输出层等。 ▲ 图1.1 CNN的基本结构 ▲ 图1.2 CN

    2024年04月16日
    浏览(37)
  • 【综述】一文读懂卷积神经网络(CNN)

    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。本文旨在介绍CNN的基本概念和结构,以及CNN网络架构设计的基本思路。 1. 什么是卷积神经网络? 卷积神经网

    2024年01月18日
    浏览(37)
  • 头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解

    本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。旨

    2024年02月12日
    浏览(37)
  • 故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab)

    故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab) GCN(Graph Convolutional Network)是一种基于图结构数据进行卷积操作的神经网络模型。它在处理图数据上展现了很好的性能,特别适用于节点分类、图分类和图生成等任务。 GCN模型的核心思想是将图结构数据转化

    2024年04月11日
    浏览(121)
  • 大数据深度学习卷积神经网络CNN:CNN结构、训练与优化一文全解

    本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性、定义与层次介绍、训练与优化,详细分析了其卷积层、激活函数、池化层、归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强、损失函数、优化器、学习率调整、正则化技巧与模型评估调优。

    2024年02月01日
    浏览(44)
  • 神经网络基础-神经网络补充概念-30-搭建神经网络块

    搭建神经网络块是一种常见的做法,它可以帮助你更好地组织和复用网络结构。神经网络块可以是一些相对独立的模块,例如卷积块、全连接块等,用于构建更复杂的网络架构。

    2024年02月12日
    浏览(50)
  • 神经网络基础-神经网络补充概念-17-计算神经网络的输出

    计算神经网络的输出通常涉及前向传播(Forward Propagation)的过程,其中输入数据通过网络的层级结构,逐步被传递并变换,最终生成预测结果。下面我将为你展示一个简单的神经网络前向传播的示例。 假设我们有一个具有以下参数的简单神经网络: 输入层:2个神经元 隐藏

    2024年02月12日
    浏览(42)
  • 神经网络与卷积神经网络

    全连接神经网络是一种深度学习模型,也被称为多层感知机(MLP)。它由多个神经元组成的层级结构,每个神经元都与前一层的所有神经元相连,它们之间的连接权重是可训练的。每个神经元都计算输入的加权和,并通过一个非线性激活函数进行转换,然后将结果传递到下一

    2024年02月10日
    浏览(49)
  • 神经网络实验--卷积神经网络

    本实验主要为了掌握深度学习的基本原理;能够使用TensorFlow实现卷积神经网络,完成图像识别任务。 文章目录 1. 实验目的 2. 实验内容 3. 实验过程 题目一: 题目二: 实验小结讨论题 ①掌握深度学习的基本原理; ②能够使用TensorFlow实现卷积神经网络,完成图像识别任务。

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包