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

深度学习day02--神经网络(前三节)

深度学习day02–神经网络(前三节)

神经网络的一个重要性质是它可以自动地从数据中学习到合适的权重参数。

在这里插入图片描述

一、从感知机到神经网络

  1. 神经网络的例子

    我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层。中间层有时也称为隐藏层。“隐藏”一词的意思是,隐藏层的神经元(和输入层、输出层不同)肉眼看不见。输入层到输出层依次称为第0层、第1层、第2层。

在这里插入图片描述

图中的网络一共由3层神经元构成,但实质上只有2层神经元有权重,因此将其称为“2层网络”。本书将根据实质上拥有权重的层数(输入层、隐藏层、输出层的总数减去 1后的数量)来表示网络的名称。

  1. 复习感知机

    添加权重为b的输入信号1,改写成更加简洁的形式:
    在这里插入图片描述

  2. 激活函数的登场

    刚才登场的h(x)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数(activation function)。激活函数的作用在于决定如何来激活输入信号的总和。
    在这里插入图片描述

​ 首先,计算加权输入信号和偏置的总和,记为a。然后,式(3.5)用h()函数将a转换为输出y。

在这里插入图片描述

二、激活函数

激活函数是连接感知机和神经网络的重要桥梁。

之前的的激活函数以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为“阶跃函数”。实际上,如果将激活函数从阶跃函数换成其他函数,就可以进入神经网络的世界了。

  1. sigmoid函数

在这里插入图片描述

上一章介绍的感知机和接下来要介绍的神经网络的主要区别就在于这个激活函数。

  1. 阶跃函数的实现

    def step_function(x): if x > 0:return 1else:return 0
    

在这里插入图片描述

这个实现简单、易于理解,但是参数x只能接受实数(浮点数)。但不允许参数取NumPy数组,如:step_function(np.array([1.0, 2.0])),修改如下:

def step_function(x): y = x > 0 return y.astype(int)

用以下例子解释上述代码:

对NumPy数组进行不等号运算后,数组的各个元素都会进行不等号运算,生成一个布尔型数组。这里,数组x中大于0的元素被转换为True,小于等于0的元素被转换为False,从而生成一个新的数组y。用astype()方法转换NumPy数组的类型。

import numpy as np
x = np.array([2,-2,100,0.4])
x
y = x > 0 
y
y = y.astype(int)
y

在这里插入图片描述

  1. 阶跃函数的图形

    import numpy as np
    import matplotlib.pyplot as pltdef step_function(x): return np.array(x > 0, dtype = int)
    # np.arange(-5.0, 5.0, 0.1)在−5.0到5.0的范围内,以0.1为单位,生成NumPy数组([-5.0, -4.9,..., 4.9])。
    x = np.arange(-5,5,0.1)
    y = step_function(x)
    plt.plot(x,y)
    plt.ylim(-0.1,1.1)
    plt.show()
    

在这里插入图片描述

  1. sigmoid函数的实现

    def sigmoid(x):return 1 / (1 + np.exp(-x))sigmoid(4)
    sigmoid(np.array([3,10,-2]))
    

在这里插入图片描述

之所以sigmoid函数的实现能支持NumPy数组,秘密就在于NumPy的广播功能

在这里插入图片描述

sigmoid函数的图像:

import numpy as np
import matplotlib.pyplot as pltx = np.arange(-5,5,0.1)
y = sigmoid(x)plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()

在这里插入图片描述

  1. sigmoid函数和阶跃函数的比较

在这里插入图片描述

  • 平滑性不同:sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。
  • 输出值不同:阶跃函数只能返回0或1,sigmoid函数可以返回0.731…、0.880…等实数
  • 相同点:形状相似,两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”;输出值都在0和1之间。
  1. 非线性函数

    阶跃函数和sigmoid函数还有其他共同点,就是两者均为非线性函数。线性函数是一条笔直的直线。而非线性函数,顾名思义,指的是不像线性函数那样呈现出一条直线的函数。

    为什么不能使用线性函数呢?因为使用线性函数的话,加深神经网络的层数就没有意义了,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。

    这里我们考虑把线性函数 h(x) = cx 作为激活函数,把y(x) = h(h(h(x)))的运算对应3层神经网络,运算后结果为cccx。但是同样的处理可以由y(x) = ax(a=c^3)来表示。

    为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

  2. ReLU函数

    在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU(Rectified Linear Unit)函数。

    ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。
    在这里插入图片描述

    代码:

    def relu(x):return np.maximum(0, x)
    x = np.arange(-10,10,1)
    y = relu(x)plt.plot(x,y)
    plt.ylim(-1,10)
    plt.show()
    

在这里插入图片描述

三、多维数组的运算

  1. 多维数组

    简单地讲,多维数组就是“数字的集合”,数字排成一列的集合、排成长方形的集合、排成三维状或者(更加一般化的)N维状的集合都称为多维数组。

    一维数组:

    import numpy as np
    x = np.array([10,2,-1])
    print(x)
    np.ndim(x) # 数组维数
    x.shape # 数组形状 结果是个元组
    x.shape[0]
    

在这里插入图片描述

二维数组:

y = np.array([[1,2,3], [4,57,19]])
np.ndim(y)
y.shape
y.shape[0]

在这里插入图片描述

第一个维度对应第0维,第二个维度对应第1维(Python的索引从0开始)。二维数组也称为矩阵(matrix)。数组的横向排列称为行(row),纵向排列称为列(column)。
在这里插入图片描述

  1. 矩阵乘法

在这里插入图片描述

矩阵的乘积是通过左边矩阵的行(横向)和右边矩阵的列(纵向)以对应元素的方式相乘后再求和而得到的。

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])
A
B
A.shape
B.shape
np.dot(A,B)
# A.dot(B)

在这里插入图片描述

np.dot(A, B)和np.dot(B, A)的值可能不一样。矩阵A的第1维的元素个数(列数)必须和矩阵B的第0维的元素个数(行数)相等。

在这里插入图片描述

  1. 神经网络的内积

    这个神经网络省略了偏置和激活函数,只有权重。
    在这里插入图片描述

    X = np.array([1,2])
    X.shape
    W = np.array([[1,3,5],[2,4,6]])
    W
    W.shape
    Y = np.dot(X,W)
    Y
    

在这里插入图片描述
通过矩阵的乘积一次性完成计算的技巧在实现的层面非常重要。

http://www.xdnf.cn/news/16259.html

相关文章:

  • Elasticsearch-8.17.0 centos7安装
  • Ubuntu 环境下创建并启动一个 MediaMTX 的 systemd 服务
  • 栈与队列:数据结构核心解密
  • 链表反转算法详解
  • Fluent自动化仿真(TUI命令脚本教程)
  • springboot(3.4.8)整合mybatis
  • 【图像理解进阶】如何对图像中的小区域进行细粒度的语义分割?
  • WAIC2025预告|英码深元AI一体机将亮相华为昇腾展区,以灵活部署的能力赋能行业智能化转型
  • Nginx简单介绍
  • Java-Properties类和properties文件详解
  • 图论:最小生成树
  • classgraph:Java轻量级类和包扫描器
  • linux C — udp,tcp通信
  • 【Chrome】下载chromedriver的地址
  • 深入解析浏览器存储方案:Cookie、localStorage和sessionStorage特性与应用
  • GPU 服务器ecc报错处理
  • Java排序算法之<冒泡排序>
  • 单片机(STM32-ADC模数转换器)
  • 优思学院|QC七大手法之一的检查表应如何有效使用?
  • CSS 盒子模型学习版的理解
  • 数据结构 二叉树(1)
  • yarn在macOS上的安装与镜像源配置:全方位指南
  • 从 SQL Server 到 KingbaseES V9R4C12,一次“无痛”迁移与深度兼容体验实录
  • Orbbec开发---数据流与数据流操作
  • ZLMediaKit 源代码入门
  • Spring 策略模式实现
  • 【DeepRare】疾病识别召回率100%
  • SpringBoot学习路径二--Spring Boot自动配置原理深度解析
  • 教培机构如何开发自己的证件照拍照采集小程序
  • 萤石云替代产品摄像头方案萤石云不支持TCP本地连接-东方仙盟