Python学习记录 深度学习 如何搭建一个简单的人工神经网络

深度学习

什么是深度学习

深度学习是一个复杂的机器学习算法,它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据

深度学习和机器学习的区别

参考知乎

神经网络(ANN)

在这里插入图片描述

什么是神经网络

在这里插入图片描述

神经网络可以分为生物神经网络和人工神经网络,人工神经网络是模仿生物神经网络设计的,一般分为三层:分别是输入曾输出层和隐藏层
隐藏层是计算机模拟人脑的过程

生物神经网络

生物神经网络(Biological Neural Networks)一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动

人工神经网络

人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

人工神经网络的特点

  • 具有自我学习功能
  • 具有联想存储功能
  • 具有高速寻找优化解的能力

人工神经网络的优势

人工神经网络完成非常轻松得完成下面5类功能

  • 模式分类
  • 聚类
  • 回归与拟合
  • 优化计算
  • 数据压缩

人工神经网络分类

根据拓扑结构分为向前网络反馈网络

  • 向前网络是网络中各个神经元接收前一级的输入,并输出到下一级,没有反馈,可以用一个有向无环路图表示,例如:感知器、BP神经网络
  • 反馈网络是网络内神经元间的反馈,这种神经网络的信息处理是状态的变换,可以用一个无向的完备图表示,例如:BAM双向联想记忆网络

感知器

感知器是人工神经网络中的一种典型结构,它的主要的特点是结构简单,对所能解决的问题 存在着收敛算法,并能从数学上严格证明,从而对神经网络研究起了重要的推动作用。

单层感知器

输入和输出端之间没有隐藏层,只能分类简单线性可分的模型(比如二分类),只能画出一条直线
常见于非线性决策边界
在这里插入图片描述
在这里插入图片描述

多层感知器

输入和输出端之间多了隐藏层
可以实现非线性分类,并且可以画多条直线
在这里插入图片描述

感知器优缺点
优点

模型简单,易于实现

缺点

无法完美得处理线程不可分得训练数据
最终结果受训练集的数据影响很大

激活函数

实现神经元输入和输出的非线性化。加入非线性因素,可以画曲线
在这里插入图片描述

常见激活函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

BP反向传播神经网络

用于对神经网络进行优化,对超参数的部分进行模拟,直到修正到完美的参数
比如:真实值是100 预测值是101,算超参数,进行修正,直到预测值变成100
常用梯度下降法

梯度下降法

梯度下降法是一种求解局部函数极小值点迭代优化算法
给定一个点、计算当前的导数,沿着导数正负反向取值,得到新的点,最后重复之前的步骤,不断重复,直到满足最终条件
在这里插入图片描述

构建一个简单的神经网络

你已经学会了上面的理论,现在来构建一个最简单的神经网络来预测D要不要去爬山吧!

目标

根据A、B、C、D的爬山数据,预测D去不去爬山

背景

A、B、C、D经常一起去爬山
用1表示去爬山 0表示没去爬山
前5次数据是
A B C D
0 1 0 1
1 1 0 1
1 0 1 0
0 0 1 0
0 1 1 1
需要预测的数据:
A B C D
0 1 0 ?

创建数据

引入库

import numpy as np

前五次数据可以用矩阵进行表示
ABC去爬山的数据可以作为输入

X = np.array([[0,1,0],[1,1,0],[1,0,1],[0,0,1],[0,1,1]])

D的数据可以作为输出

Y = np.array([[1],[1],[0],[0],[1]])

初始化假设

用随机数做假设,假设D去不去爬山和ABC去不去爬山之间相关系数的权重为weights

np.random.seed(1)
weights = 2 * np.random.random((3,1))-1

输入神经元进行计算

假设weights算出的值接近0,表示D不去爬山的可能性大,反之接近1则去爬山的可能性大
使用前五次D、的数据Y - 利用假设关系得到的output数值 最后得到误差error
通过不断循环调整假设关系weights,减少误差,最终得到误差最小的一组关系系数weights

for it in range(100000):
	output = 1/(1+np.exp(-np.dot(X,weights)))
	error = Y - output
	delta = error * output *(1-output)
	weights += np.dot(X.T,delta)

输出运行结果

print("误差为:\n",error)
print("相关系数为:\n",weights)
probability = 1/(1+np.exp(-np.dot([[0,1,0]],weights)))
print("D去爬山的概率为:\n",probability)

在这里插入图片描述

可以看到D去爬山的概率为0.999

完整代码

import numpy as np
# 创建数据
X = np.array([[0,1,0],[1,1,0],[1,0,1],[0,0,1],[0,1,1]])
Y = np.array([[1],[1],[0],[0],[1]])
# 初始化假设
np.random.seed(1)
weights = 2 * np.random.random((3,1))-1
# 输入神经元进行计算
for it in range(100000):
	output = 1/(1+np.exp(-np.dot(X,weights)))
	error = Y - output
	delta = error * output *(1-output)
	weights += np.dot(X.T,delta)
# 输出运行结果
print("误差为:\n",error)
print("相关系数为:\n",weights)
probability = 1/(1+np.exp(-np.dot([[0,1,0]],weights)))
print("D去爬山的概率为:\n",probability)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三千院喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值