python对编写神经网络作用_神经网络(BP)算法Python实现及应用
本文实例为大家分享了Python实现神经网络算法及应用的具体代码,供大家参考,具体内容如下
首先用Python实现简单地神经网络算法:
import numpy as np
# 定义tanh函数
def tanh(x):
return np.tanh(x)
# tanh函数的导数
def tan_deriv(x):
return 1.0 - np.tanh(x) * np.tan(x)
# sigmoid函数
def logistic(x):
return 1 / (1 + np.exp(-x))
# sigmoid函数的导数
def logistic_derivative(x):
return logistic(x) * (1 - logistic(x))
class NeuralNetwork:
def __init__(self, layers, activation='tanh'):
"""
神经网络算法构造函数
:param layers: 神经元层数
:param activation: 使用的函数(默认tanh函数)
:return:none
"""
if activation == 'logistic':
self.activation = logistic
self.activation_deriv = logistic_derivative
elif activation == 'tanh':
self.activation = tanh
self.activation_deriv = tan_deriv
# 权重列表
self.weights = []
# 初始化权重(随机)
for i in range(1, len(layers) - 1):
self.weights.append((2 * np.random.random((layers[i - 1] + 1, layers[i] + 1)) - 1) * 0.25)
self.weights.append((2 * np.random.random((layers[i] + 1, layers[i + 1])) - 1) * 0.25)
def fit(self, X, y, learning_rate=0.2, epochs=10000):
"""
训练神经网络
:param X: 数据集(通常是二维)
:param y: 分类标记
:param learning_rate: 学习率(默认0.2)
:param epochs: 训练次数(最大循环次数,默认10000)
:return: none
"""
# 确保数据集是二维的
X = np.atleast_2d(X)
temp = np.ones([X.shape[0], X.shape[1] + 1])
temp[:, 0: -1] = X
X = temp
y = np.array(y)
for k in range(epochs):
# 随机抽取X的一行
i = np.random.randint(X.shape[0])
# 用随机抽取的这一组数据对神经网络更新
a = [X[i]]
# 正向更新
for l in range(len(self.weights)):
a.append(self.activation(np.dot(a[l], self.weights[l])))
error = y[i] - a[-1]
deltas = [error * self.activation_deriv(a[-1])]
# 反向更新
for l in range(len(a) - 2, 0, -1):
deltas.append(deltas[-1].dot(self.weights[l].T) * self.activation_deriv(a[l]))
deltas.reverse()
for i in range(len(self.weights)):
layer = np.atleast_2d(a[i])
delta = np.atleast_2d(deltas[i])
self.weights[i] += learning_rate * layer.T.dot(delta)
def predict(self, x):
x = np.array(x)
temp = np.ones(x.shape[0] + 1)
temp[0:-1] = x
a = temp
for l in range(0, len(self.weights)):
a = self.activation(np.dot(a, self.weights[l]))
return a
使用自己定义的神经网络算法实现一些简单的功能:
小案例:
X: Y
0 0 0
0 1 1
1 0 1
1 1 0
from NN.NeuralNetwork import NeuralNetwork
import numpy as np
nn = NeuralNetwork([2, 2, 1], 'tanh')
temp = [[0, 0], [0, 1], [1, 0], [1, 1]]
X = np.array(temp)
y = np.array([0, 1, 1, 0])
nn.fit(X, y)
for i in temp:
print(i, nn.predict(i))
发现结果基本机制,无限接近0或者无限接近1
第二个例子:识别图片中的数字
导入数据:
from sklearn.datasets import load_digits
import pylab as pl
digits = load_digits()
print(digits.data.shape)
pl.gray()
pl.matshow(digits.images[0])
pl.show()
观察下:大小:(1797, 64)
数字0
接下来的代码是识别它们:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.metrics import confusion_matrix, classification_report
from sklearn.preprocessing import LabelBinarizer
from NN.NeuralNetwork import NeuralNetwork
from sklearn.cross_validation import train_test_split
# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target
# 处理数据,使得数据处于0,1之间,满足神经网络算法的要求
X -= X.min()
X /= X.max()
# 层数:
# 输出层10个数字
# 输入层64因为图片是8*8的,64像素
# 隐藏层假设100
nn = NeuralNetwork([64, 100, 10], 'logistic')
# 分隔训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y)
# 转化成sklearn需要的二维数据类型
labels_train = LabelBinarizer().fit_transform(y_train)
labels_test = LabelBinarizer().fit_transform(y_test)
print("start fitting")
# 训练3000次
nn.fit(X_train, labels_train, epochs=3000)
predictions = []
for i in range(X_test.shape[0]):
o = nn.predict(X_test[i])
# np.argmax:第几个数对应最大概率值
predictions.append(np.argmax(o))
# 打印预测相关信息
print(confusion_matrix(y_test, predictions))
print(classification_report(y_test, predictions))
结果:
矩阵对角线代表预测正确的数量,发现正确率很多
这张表更直观地显示出预测正确率:
共450个案例,成功率94%
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python对编写神经网络作用_神经网络(BP)算法Python实现及应用相关推荐
- 5个python标准库及作用_零基础编程——Python标准库使用
摘要 书接前文: 本文将讲解Python标准库内容,有操作系统接口os.文件路径通配符glob.命令行参数sys.正则表达式re.数学math.日期与时间.数据压缩.性能评估等,我们只需要知道有些什么 ...
- python中float函数作用_解析要在Python中浮动的字符串(float()函数)
给定一个字符串值(包含浮点值),我们必须在Python中将其转换为浮点值. 要将字符串值转换为float,我们使用float()功能. Python float() 功能 float()functio ...
- mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...
中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...
- linux python开发环境sql数据迁移到mysql_运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库...
运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mys ...
- python神经网络作用_Python · 神经网络(三*)· 网络
(这里是最终成品的 GitHub 地址) (这里是本章用到的 GitHub 地址) 推荐先修章节:Python · 神经网络(二*)· 层 Python · 神经网络(三)· 网络 由于分形这个东西是 ...
- python识别手写文字_如何快速使用Python神经网络识别手写字符?(文末福利)
原标题:如何快速使用Python神经网络识别手写字符?(文末福利) 点击标题下[异步社区]可快速关注 在本文中,我们将进一步探讨一些使用Python神经网络识别手写字符非常有趣的想法.如果只是想了解神 ...
- python 神经网络原理_神经网络理论基础及Python实现
一.多层前向神经网络 多层前向神经网络由三部分组成:输出层.隐藏层.输出层,每层由单元组成; 输入层由训练集的实例特征向量传入,经过连接结点的权重传入下一层,前一层的输出是下一层的输入;隐藏层的个数是 ...
- python 神经网络原理_神经网络工作原理
更多:神经网络- 机器学习这一强大的分支结束了 AI 的寒冬,迎来了人工智能的新时代.简而言之,神经网络可能是今天最具有根本颠覆性的技术. 看完这篇神经网络的指南,你也可以和别人聊聊深度学习了.为此, ...
- 吴恩达|机器学习作业4.0神经网络反向传播(BP算法)
4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务.在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手 ...
最新文章
- Java通过泛型的模板类型实例化对象
- 《智能家居》培训第六天------2019-01-10
- 电脑怎么彻底删除软件_电脑在使用的过程中如何彻底删除今日热点广告弹窗的方法...
- JavaScript--模拟网络爬虫
- 2.5.1.2、ImportBeanDefinitionRegistrar 注册BeanDefinition
- c语言基础知识 面试,c语言面试最必考的十道试题,求职必看!!!
- 离散求边缘密度_求一把能退烧的机械键盘?——机械键盘购买“指北”
- android布局下划线设置,我可以在Android布局中为文本加下划线吗?
- 历史的天空-【1】配置
- S32k144SDK版本——FTM_IC输入捕获
- Java加密解密代码小记
- 群晖黑科技docker套件_群晖Docker玩法
- 触控笔有必要买吗?苹果平板触控笔排行榜
- 企业工商信息查询API开发文档
- 华为计算机平台芯片,华为连发两款AI芯片,计算力远超谷歌及英伟达
- JS里数组合并的几种方法
- Caffe 源码 - BatchNorm 层与 Scale 层
- 一次关于Uber的通宵抬杠
- [笔记]Windows核心编程《十九》DLL基础
- winscp连接nas root账户拒绝访问_树莓派 3B 结合 NextCloud PI 搭建皮米级 NAS 家庭储存...
热门文章
- 报错,> 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
- 罗振宇2021跨年演讲1:长大以后有多少责任和烦恼?
- Scala学习笔记06:自定义控制结构
- akka案例:统计单词个数
- 三角学——极坐标_2
- linux 显示套接字统计信息,Linux 命令 - ss: 查看套接字统计信息
- 2017.9.30 CF #R4 D 思考记录
- 【英语学习】【Level 07】U06 First Time L6 Not your typical experience
- 【英语学习】【English L06】U08 News L4 A piece of great news
- 四.3D-2D:PnP问题求解 线性法