神经网络的Python实现(一)了解神经网络

网络上深度学习相关博客教程质量参差不齐,很多细节很少有文章提到,所以本着夯实深度学习基础的想法写下此系列博文。

本文会从神经网络的概述、不同框架的公式推导和对应的基于numpy的Python代码实现等方面进行干货的讲解。如有不懂之处欢迎在评论留言,本人也初学机器学习与深度学习不久,有不足之处也请欢迎我联系。:)

推荐书籍与视频教程:
《机器学习》—周志华
《Deep learning》—Ian Goodfellow、Yoshua Bengio 和 Aaron Courville
李宏毅深度学习视频课程-youtube Bilibili


神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。

神经网络最基本的组成是神经元模型,每个神经元与其他神经元相连,神经元接受到来自 $n$ 个其他神经元传递过来的输入信号,这些信号通过带有权重的连接进行传递,神经元接收到的总输入值将于阈值进行比较,然后通过“激活函数”处理产生输出。把许多神经元按一定层次结构连接起来就得到了神经网络。

感知机模型

感知机模型(Perceptron)由两层神经元组成,分别是输入层与输出层。

感知机模型是最为基础的网络结构,其计算形式如下

其中 $f$ 为激活函数。我们先假设 $f$ 是阶跃函数(Step function)。

12345678910
def (out):    """    y = sign(w·x + b)    :param out - the result of w·x + b    :return: y    """    if out >= 0:        return 1    else:        return -1

感知机的学习规则非常简单,对于训练样本 $(x,y)$,若当前感知机的输出为 $hat{y}$,则感知机参数更新方式如下

其中 $eta$ 称为学习率(learning rate)

下面我们使用Python来实现感知机进行分类:

12345678910111213141516大专栏  神经网络的Python实现(一)了解神经网络line">17
w = np.zeros(shape=data[0].shape)b = np.zeros(shape=label[0].shape)

def update(x, y, learning_rate):    """    当发现误分类点时,更新参数w,b.    更新方法:    w = w + learning_rate * x * y    b = b + learning_rate * y    :param x: 误分类点坐标    :param y: 误分类点正确分类标签    :return: None    """    global w, b    w = w + learning_rate * x * y    b = b + learning_rate * y

假设训练集是线性可分的。更新过程便是,遍历全部的训练实例,通过感知机的计算方式计算出结果 $y$ 与对应标签进行比较(感知机标签一般为 1 和 -1),如果误分便使用updata()进行参数更新。下图是感知机线性分类的拟合过程。

感知机拟合过程

随意写的训练数据

1234
# x[[3.2, 0.8], [5, 5], [3, 3], [4, 3], [1, 1], [2, 2], [1, 4]]# y[-1, 1, 1, 1, -1, -1, -1]

感知机只有输入层和输出层,且只有输出层神经元进行激活处理,即只有一层功能神经元,其学习能力非常有限。如果问题是非线性可分问题,那么感知机会发生振荡,无法收敛。

多层网络

为了解决非线性可分问题,那么便需要采用多层功能神经元,如简单的两层感知机。如图

多层前馈神经网络

其中输入层与输出层之间一层被称为隐藏层(隐含层),隐藏层和输出层都是拥有激活函数的功能神经元。一般情况下,隐藏层可以有多层,同层神经元之间不存在连接,也不存在跨层连接。这样的神经网络结构被称为多层前馈神经网络(multi-layer feedforward neural networks)

因多层功能神经元的存在,多层网络的学习能力要强得多,同时简单的感知机学习规则显然已经无法满足要求。更强大的学习算法,误差逆传播(error BackPropagation)算法,即BP算法便是最成功的神经网络学习算法。

TODO

在下一篇博文中,我们将使用BP算法来实现“全连接网络”。

原文地址:https://www.cnblogs.com/lijianming180/p/12041507.html

时间: 2024-10-04 15:27:08

神经网络的Python实现(一)了解神经网络的相关文章

三层BP神经网络的python实现

这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏层的节点数,看节点数增加了,预测的精度会否提升 1 import math 2 import random 3 import string 4 5 random.seed(0) 6 7 # 生成区间[a, b)内的随机数 8 def rand(a, b): 9 return (b-a)*random

一个 11 行 Python 代码实现的神经网络

概要:直接上代码是最有效的学习方式.这篇教程通过由一段简短的 python 代码实现的非常简单的实例来讲解 BP 反向传播算法. 代码如下: Python 1 2 3 4 5 6 7 8 9 10 11 X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ]) y = np.array([[0,1,1,0]]).T syn0 = 2*np.random.random((3,4)) - 1 syn1 = 2*np.random.random((4,1))

《卷积神经网络的Python实现》PDF代码+《解析深度学习卷积神经网络原理与视觉实践》PDF分析

CNN正在革新几个应用领域,如视觉识别系统.自动驾驶汽车.医学发现.创新电子商务等.需要在专业项目或个人方案中利用复杂的图像和视频数据集来实现先进.有效和高效的CNN模型. 深度卷积网络DCNN是目前十分流行的深度神经网络架构,它的构造清晰直观,效果引人入胜,在图像.视频.语音.语言领域都有广泛应用. 深度学习,特别是深度卷积神经网络是人工智能的重要分支领域,卷积神经网络技术也被广泛应用于各种现实场景,在许多问题上都取得了超越人类智能的结果. <卷积神经网络的Python实现>作为深度学习领域

神经网络和深度学习之——前馈神经网络吉林快三带红黑玩法

前面一章我们详细讲解了神经网络的组成吉林快三带红黑玩法 话仙源码论坛下载地址 QQ2952777280,工作原理,信号在网络中如何流动,以及如何求解每一个输入信号赋予的权重等计算过程:同时我们还构建了一个逻辑回归网模型来解决鸢尾花分类问题,很明显,这种网络很"浅",但它对于分类鸢尾花数据还是非常有效的,而且不仅仅是鸢尾花,对于有需要的其他二分类问题,该模型也能表现得很好.由于这种模型太"浅"了,我们一般称这种模型为bp网络,而不直接称为神经网络,有些人甚至觉得这种网

Duanxx的神经网络学习: 自己动手写神经网络(二) 前馈网络的实现

本文是继续Duanxx的神经网络学习: 自己动手写神经网络(一) 搭建一个简单的网络框架 写的第二篇文章,将神经网络的前馈网络实现并测试. 本文的代码下载地址 1 为神经元Neuron添加权Weight 在上一篇文章中,我已经搭起了一个神经网络的框架. 但是那只是一个框架而已,什么都没有是实现,而这个框架的最基本的东西就是神经元Nenron,这里就考虑将Neuron实现一下. 对于一个神经元而言,它的输入是上一层神经元的输出,可以不用太关心,它也有自己的输出outputvalue,同时,它还要控

人工神经网络之Python 实战

引言:Python是最好最热门的编程语言之一,以简单易学.应用广泛.类库强大而著称,是实现机器学习算法的首选语言.本文以人工神经网络的实战为例,证明需要深入理解算法的原理.优劣势等特点以及应用场景,以能达到应用自如的程度.本文选自<Python大战机器学习:数据科学家的第一个小目标>. 在本次操作前,这里需要导入的包为: 感知机学习算法的原始形式 给出生成线性可分数据集的生成算法: 参数 ■n:正类的样本点数量,也是负类的样本点数量.总的样本点数量为2n. 返回值:所有的样本点组成的数组,形状

数据挖掘——回归分析2——简单神经网络的python实现

神经网络(Artificial Neural Network):全称为人工神经网络(ANN),是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型. 部分原理: 下面是单个神经元的数学模型: +1代表偏移值(偏置项, Bias Units):X1,X2,X2代表初始特征:w0,w1,w2,w3代表权重(Weight),即参数,是特征的缩放倍数:特征经过缩放和偏移后全部累加起来,此后还要经过一次激活运算然后再输出. 最常见的激活函数是Sigmoid(S形曲线),

可变多隐层神经网络的python实现

说明:这是我对网上代码的改写版本(基于win7 + python34) 一.先说说改动的部分 1) 改写了NetStruct类初始化函数 原来: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(self, x, y, hidden_layers, activ_fun_list, performance_function = 'mse'): 现在: 1 class NetStruct: 2 '''神经网络结构''' 3 def __init__(s

使用Python scikit-learn 库实现神经网络算法

1:神经网络算法简介 2:Backpropagation算法详细介绍 3:非线性转化方程举例 4:自己实现神经网络算法NeuralNetwork 5:基于NeuralNetwork的XOR实例 6:基于NeuralNetwork的手写数字识别实例 7:scikit-learn中BernoulliRBM使用实例 8:scikit-learn中的手写数字识别实例 一:神经网络算法简介 1:背景 以人脑神经网络为启发,历史上出现过很多版本,但最著名的是backpropagation 2:多层向前神经网