神经网络基础学习


title: 神经网络学习(1)

神经网络基础学习(1)

一、NumPy库介绍

1.导入NumPy库

​ NumPy库是python的外部库,NumPy库给我们提供了许多高效简单的方法来进行深度学习中对数组和矩阵的操作,首先通过以下代码来引入NumPy库

import numpy as np

这样我们就讲numpy库以np的形式导入

2.NumPy库的基本操作

首先我们先学会去生成一个numpy数组

>>>A = np.array([[1, 2], [3, 4]])
>>>print(A)
[[1 2]
 [3 4]]
>>>A.shape
(2, 2)
>>>A.dtype
dtype('int64')

这里我们创建一个2*2的矩阵A。另外,我们通过shape函数可以来查看矩阵的形状,矩阵里元素的数据类型可以通过dtype函数来查看,接下来看一下矩阵之间的运算

>>>B = np.array([[3, 0], [0, 6]])
>>>A + B
array([[4, 2],
       [3, 10]])
>>>A * B
array([[3, 0],
       [0, 24]])

和数组的算术运算相同,矩阵的算术运算也可以在相同形状的矩阵间以对应元素的方式进行,更重要的是,numpy矩阵可以通过广播的形式来进行单一数值对矩阵的算术运算,如下

>>>print(A)
[[1 2]
 [3 4]]
>>>A * 10
array([[10, 20],
       [30, 40]])

至此,关于nump库最简单的函数介绍完毕,另外一些函数下面碰见的时候会接着介绍

二、感知机

1.感知机is what?

截屏2022-10-07 下午5.28.10

​ 感知机是个什么玩意?上图就是一个非常简单的接受两个输入信号的**感知机。图中X1与X2是输入信号**,y是输出信号,w1与w2表示权重。图中的〇称为”神经元“或者“节点“。

感知机中传递信号也是相当明了,直接将输入值x乘上权重w传送至y,但首先我们得引进“阀值”这个概念,感知机中的y输出是只有1/0两种取值,所以我们要规定一个界线来判断y输出1还是0,我们通常用θ来表示阀值

截屏2022-10-08 下午5.58.35

2.感知机的简单应用

​ 接着,我们用感知机来实现一些简单的应用,例如去完成简单逻辑电路的门电路的功能

​ 在此之前,我们再引入偏置的概念,观察下式

截屏2022-10-08 下午5.58.23

​ (2)式与(1)式相比,只是将(1)式中的阀值移动到式子的左边,我们将b称为偏置,这一步操作有利于接下来神经网络搭建时函数的定义

​ OK,我们已经把感知机的基础内容全部介绍完毕,接着我们先来实现与门

(1)与门

​ 我们在高中就已经学习过只有当所有的输入值满足高电平的时候,输出才是高电平,所以我们理所当然的得到了以下的代码

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

​ 现在我们来解读以上的代码,其中权重w1与w2都是0.5,偏置是 -0.7(我们可以理解为二极管的导通电压为0.7V),说明只有当上一层的加权和超过0.7,下一层的神经元才能被激活,例如

>>>AND(1, 1)
1
>>>AND(1, 0)
0
>>>AND(0, 0)
0
(2)与非门&或门

​ 接着我们按照相同的思路来完成与非门、或门的代码

# 与非门
def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

# 或门
def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w * x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

​ 与非门、与门、或门都是相同的原理,所以我们仅需要改变感知机中的权重与偏置的值

3.多层感知机(异或门的实现)

​ 上面我们成功实现了几个简单的门电路,但当我们想用单个感知机来实现异或门的功能,就瞬间傻眼了,在这里我们需要多层感知机配合来实现异或门的功能

​ 我们先写出异或门的表达式(下图)

截屏2022-10-07 下午10.01.22

​ 根据上图,我们可以通过3个感知机来实现异或门

# 异或门
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

二、神经网络(从感知机到神经网络)

1.激活函数

​ 上面我们介绍了什么是感知机,现在我们可以正式踏步进入神经网络的学习,我知道你现在很急,但你先别急,按照传统,我们再引入一个新的概念:激活函数

截屏2022-10-07 下午10.10.00

看上图,我们在感知机的基础上,我们将输出的神经元再进行细分,其中的a就表示上一层的加权和,y表示向后一层神经层传输的值,而连接a和y的函数我们称为激活函数

截屏2022-10-08 下午5.58.45

2.sigmoid函数

sigmoid函数是一个很常见的激活函数,式子如下

截屏2022-10-08 下午5.58.56

​ 用python我们可以写成

# sigmoid函数
def sigmoid(x):
  return 1 / (1 + np.exp(-x))


>>>x = np.array([-1.0, 1.0, 2.0])
>>>sigmoid(x)
array([0.26894142, 0.73105858, 0.88079708])

我们运用Matplotlib库来画出sigmoid函数图像

截屏2022-10-07 下午10.26.55

sigmoid函数是一条平滑的曲线,输出会随着输入连续性变化。sigmoid函数的平滑性对神经网络的学习具有重要意义

对于感知机这种只能输出1/0的函数,我们称为阶跃函数,sigmoid函数可以返回0.114514, 0.314159, 0.8878……等实数。感知机中流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号,为了充分发挥多层神经网路的优势,我们在选择激活函数的时候必须使用非线性函数

3.ReLu函数

​ 介绍完sigmoid函数,我们再来介绍另一个目前使用非常广泛的激活汗水——ReLu函数

​ ReLu函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0

截屏2022-10-08 下午5.59.05

ReLu函数是一个非常简单的函数,所以在实现的时候也很方便,可以写成下面形式

def relu(x):
  return np.maximum(0, x)
至此,我们介绍完了有关神经网络的基础函数和概念,下一节会讲到在神经网络中,数据究竟是怎样进行传输和计算

IMG_1033

おめでとうございます

​ 编辑者:Ice Man

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ice Programmer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值