从感知机到神经网络

一、神经网络的一个重要性质

1.1 重要性质

自动从数据中学习到合适的权重参数

1.2 称呼

共n层神经元,称之为n-1层网络

  • 输入层
  • 中间层(隐藏层)
  • 输出层

1.3计算神经网络

节点值*权重值+偏置值=输出值

根据输出值的大小计算出节点值

  • 输出值超过0,节点值是1
  • 输出值小于等于0,节点值是0

将原来的表达式用新函数 h ( x ) h(x) h(x)来表示

二、激活函数登场

简介

将输入信号的总和转换为输出信号

  • 输入:输入信号的加权总和
  • 激活函数:h(a)
  • 计算得到结果

可以在神经元内部中明确的显示出激活函数的激活过程

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

三、感知机使用的激活函数

3.1 使用小技巧将numpy数组的值进行转化

使用小技巧将numpy中数组类型的值进行转化

import numpy as np
x= np.array([-1.0,1.0,2.0])
x
Out[4]: array([-1.,  1.,  2.])
y=x>0
y
Out[6]: array([False,  True,  True])
y=y.astype(np.int)
yy
Traceback (most recent call last):
  File "D:\ANACONDA\envs\pytorch\lib\site-packages\IPython\core\interactiveshell.py", line 3343, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "", line 1, in <module>
    yy
NameError: name 'yy' is not defined
y
Out[9]: array([0, 1, 1])

通过一个小技巧来将数组中的不同元素转换成为输入值0或者1

3.2 阶跃函数的实现:一旦超过阈值就发生变化

是会跳跃变化的函数

def step_function(x):
    return np.array(x > 0, dtype=np.int)


x = np.arange(-5, 5, 0.1)  # 指定x的取值范围
y = step_function(x)
plt.plot(x, y) # 给定输入的x和y
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()

从感知机到神经网络_第1张图片

四、神经网络使用的激活函数

4.1 sigmod函数的实现

函数能支持数组运算很重要的一个功能就是numpy数组支持广播的功能

可以让数组和标量在根据实际情况在需要的时候使用

import numpy as np
import matplotlib.pylab as plt


def sigmod(x):
    return 1 / (1 + np.exp(-x))


x = np.arange(-5, 5, 0.1)  # 指定x的取值范围
y = sigmod(x)
plt.plot(x, y)  # 给定输入的x和y
plt.ylim(-0.1, 1.1)  # 指定y轴的范围
plt.show()

从感知机到神经网络_第2张图片

4.2 两种不同的激活函数的比较

  1. 二者的平滑性不同
  2. sigmod 函数的平滑性对于神经网络的学习具有重要的意义
  3. 阶跃函数只能返回0或者1

感知机中的神经元的阶跃函数返回的是二元信号
神经网络中的神经元sigmod函数返回的是 实数值信号

不管输入的信号值是多少,输出的值均在0和1之间

二者都是非线性函数

4.3 神经网络中的使用

在神经网络中必须使用非线性函数

  • 线性函数的使用对于神经网络的层数是没有意义的

激活函数必须使用非线性函数

五、新兴的RELU函数

5.1 介绍

  • 函数输入大于0时,直接输出该值
  • 否则输出0

5.2 实现

从感知机到神经网络_第3张图片

你可能感兴趣的:(深度学习,神经网络,python,numpy)