神经网络的Python实现(一)了解神经网络
网络上深度学习相关博客教程质量参差不齐,很多细节很少有文章提到,所以本着夯实深度学习基础的想法写下此系列博文。
本文会从神经网络的概述、不同框架的公式推导和对应的基于numpy的Python代码实现等方面进行干货的讲解。如有不懂之处欢迎在评论留言,本人也初学机器学习与深度学习不久,有不足之处也请欢迎我联系。:)
推荐书籍与视频教程:
《机器学习》—周志华
《Deep learning》—Ian Goodfellow、Yoshua Bengio 和 Aaron Courville
李宏毅深度学习视频课程-youtube Bilibili
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
神经网络最基本的组成是神经元模型,每个神经元与其他神经元相连,神经元接受到来自 $n$ 个其他神经元传递过来的输入信号,这些信号通过带有权重的连接进行传递,神经元接收到的总输入值将于阈值进行比较,然后通过“激活函数”处理产生输出。把许多神经元按一定层次结构连接起来就得到了神经网络。
感知机模型
感知机模型(Perceptron)由两层神经元组成,分别是输入层与输出层。
感知机模型是最为基础的网络结构,其计算形式如下
其中 $f$ 为激活函数。我们先假设 $f$ 是阶跃函数(Step function)。
1 |
def (out): |
感知机的学习规则非常简单,对于训练样本 $(x,y)$,若当前感知机的输出为 $hat{y}$,则感知机参数更新方式如下
其中 $eta$ 称为学习率(learning rate)
下面我们使用Python来实现感知机进行分类:
1 |
w = np.zeros(shape=data[0].shape) |
假设训练集是线性可分的。更新过程便是,遍历全部的训练实例,通过感知机的计算方式计算出结果 $y$ 与对应标签进行比较(感知机标签一般为 1 和 -1),如果误分便使用updata()进行参数更新。下图是感知机线性分类的拟合过程。
感知机拟合过程
随意写的训练数据
1 |
# x |
感知机只有输入层和输出层,且只有输出层神经元进行激活处理,即只有一层功能神经元,其学习能力非常有限。如果问题是非线性可分问题,那么感知机会发生振荡,无法收敛。
多层网络
为了解决非线性可分问题,那么便需要采用多层功能神经元,如简单的两层感知机。如图
多层前馈神经网络
其中输入层与输出层之间一层被称为隐藏层(隐含层),隐藏层和输出层都是拥有激活函数的功能神经元。一般情况下,隐藏层可以有多层,同层神经元之间不存在连接,也不存在跨层连接。这样的神经网络结构被称为多层前馈神经网络(multi-layer feedforward neural networks)
因多层功能神经元的存在,多层网络的学习能力要强得多,同时简单的感知机学习规则显然已经无法满足要求。更强大的学习算法,误差逆传播(error BackPropagation)算法,即BP算法便是最成功的神经网络学习算法。
TODO
在下一篇博文中,我们将使用BP算法来实现“全连接网络”。
神经网络的Python实现(一)了解神经网络的更多相关文章
- 一个 11 行 Python 代码实现的神经网络
一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...
- Python学习宝典,Python400集让你成为从零基础到手写神经网络的Python大神
当您学完Python,你学到了什么? 开发网站! 或者, 基础语法要点.函数.面向对象编程.调试.IO编程.进程与线程.正则表达式... 当你学完Python,你可以干什么? 当程序员! 或者, 手写 ...
- BP神经网络与Python实现
人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善. 联想大家熟悉的回归问题, 神经网络模型实际上是根据训练样本创造出一个多维输入多维输出的函数, 并使用该函数进行预测, 网 ...
- 三层BP神经网络的python实现
这是一个非常漂亮的三层反向传播神经网络的python实现,下一步我准备试着将其修改为多层BP神经网络. 下面是运行演示函数的截图,你会发现预测的结果很惊人! 提示:运行演示函数的时候,可以尝试改变隐藏 ...
- Python语言编写BP神经网络
Python语言编写BP神经网络 2016年10月31日 16:42:44 ldy944758217 阅读数 3135 人工神经网络是一种经典的机器学习模型,随着深度学习的发展神经网络模型日益完善 ...
- 【神经网络与深度学习】卷积神经网络(CNN)
[神经网络与深度学习]卷积神经网络(CNN) 标签:[神经网络与深度学习] 实际上前面已经发布过一次,但是这次重新复习了一下,决定再发博一次. 说明:以后的总结,还应该以我的认识进行总结,这样比较符合 ...
- BP神经网络在python下的自主搭建梳理
本实验使用mnist数据集完成手写数字识别的测试.识别正确率认为是95% 完整代码如下: #!/usr/bin/env python # coding: utf-8 # In[1]: import n ...
- LeNet - Python中的卷积神经网络
本教程将 主要面向代码, 旨在帮助您 深入学习和卷积神经网络.由于这个意图,我 不会花很多时间讨论激活功能,池层或密集/完全连接的层 - 将来会有 很多教程在PyImageSearch博客上将 ...
- python手写bp神经网络实现人脸性别识别1.0
写在前面:本实验用到的图片均来自google图片,侵删! 实验介绍 用python手写一个简单bp神经网络,实现人脸的性别识别.由于本人的机器配置比较差,所以无法使用网上很红的人脸大数据数据集(如lf ...
随机推荐
- vue执行期间的函数
先放上vue官方给的函数图
- SpringBoot2.0整合Quartz实现动态设置定时任务时间
一. 引入依赖 <!-- 引入quartz依赖 --> <dependency> <groupId>org.springframework.boot</ ...
- drf_jwt手动签发与校验-drf小组件:过滤-筛选-排序-分页
签发token 源码的入口:完成token签发的view类里面封装的方法. 源码中在请求token的时候只有post请求方法,主要分析一下源码中的post方法的实现. settings源码: 总结: ...
- Codeforces 1294C - Product of Three Numbers
题目大意: 给定一个n,问是否存在3个互不相同的,大于等于2的整数,满足a*b*c=n 解题思路: 可以把abc其中任意两个看作一个整体,例如a*b=d,那么可以发现d*c=n 所以d和c是n的因子 ...
- Travelling Businessmen Problem
Travelling Businessmen Problem 先求出图的两个部分,可能只有一个部分 然后用set模拟,得到不同部分差最小的 #include <bits/stdc++.h> ...
- R 画地图
R 绘制中国省市分布地图 library(maps) library(mapdata) library(maptools); getColor=function(mapdata,provname,pr ...
- Python字符串与列表
- Codeforces 1295D Same GCDs
题目链接 link Solution 这是一道结论题,有两个做法,分别用了欧拉函数或一点点莫比乌斯反演 (这里只放欧拉函数的做法) 设\(d=gcd(m,a)\) \[gcd(\frac{a}{d}, ...
- [JSOI2019]神经网络(树形DP+容斥+生成函数)
首先可以把题目转化一下:把树拆成若干条链,每条链的颜色为其所在的树的颜色,然后排放所有的链成环,求使得相邻位置颜色不同的排列方案数. 然后本题分为两个部分:将一棵树分为1~n条不相交的链的方案数:将这 ...
- [HNOI2019]鱼(计算几何)
看到数据范围n<=1000,但感觉用O(n^2)不现实,所以考虑方向应该是O(n^2logn). 一种暴力做法:用vector存到1点相同的2点和到2点相同的1点,然后枚举A,枚举BC,再枚举D ...