本文实例为大家分享了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实现及应用相关推荐

  1. 5个python标准库及作用_零基础编程——Python标准库使用

    摘要 书接前文: 本文将讲解Python标准库内容,有操作系统接口os.文件路径通配符glob.命令行参数sys.正则表达式re.数学math.日期与时间.数据压缩.性能评估等,我们只需要知道有些什么 ...

  2. python中float函数作用_解析要在Python中浮动的字符串(float()函数)

    给定一个字符串值(包含浮点值),我们必须在Python中将其转换为浮点值. 要将字符串值转换为float,我们使用float()功能. Python float() 功能 float()functio ...

  3. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  4. linux python开发环境sql数据迁移到mysql_运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库...

    运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mys ...

  5. python神经网络作用_Python · 神经网络(三*)· 网络

    (这里是最终成品的 GitHub 地址) (这里是本章用到的 GitHub 地址) 推荐先修章节:Python · 神经网络(二*)· 层 Python · 神经网络(三)· 网络 由于分形这个东西是 ...

  6. python识别手写文字_如何快速使用Python神经网络识别手写字符?(文末福利)

    原标题:如何快速使用Python神经网络识别手写字符?(文末福利) 点击标题下[异步社区]可快速关注 在本文中,我们将进一步探讨一些使用Python神经网络识别手写字符非常有趣的想法.如果只是想了解神 ...

  7. python 神经网络原理_神经网络理论基础及Python实现

    一.多层前向神经网络 多层前向神经网络由三部分组成:输出层.隐藏层.输出层,每层由单元组成; 输入层由训练集的实例特征向量传入,经过连接结点的权重传入下一层,前一层的输出是下一层的输入;隐藏层的个数是 ...

  8. python 神经网络原理_神经网络工作原理

    更多:神经网络- 机器学习这一强大的分支结束了 AI 的寒冬,迎来了人工智能的新时代.简而言之,神经网络可能是今天最具有根本颠覆性的技术. 看完这篇神经网络的指南,你也可以和别人聊聊深度学习了.为此, ...

  9. 吴恩达|机器学习作业4.0神经网络反向传播(BP算法)

    4.0.神经网络学习 1)题目: 在本练习中,您将实现神经网络的反向传播算法,并将其应用于手写数字识别任务.在之前的练习中,已经实现了神经网络的前馈传播,并使用Andrew Ng他们提供的权值来预测手 ...

最新文章

  1. Java通过泛型的模板类型实例化对象
  2. 《智能家居》培训第六天------2019-01-10
  3. 电脑怎么彻底删除软件_电脑在使用的过程中如何彻底删除今日热点广告弹窗的方法...
  4. JavaScript--模拟网络爬虫
  5. 2.5.1.2、ImportBeanDefinitionRegistrar 注册BeanDefinition
  6. c语言基础知识 面试,c语言面试最必考的十道试题,求职必看!!!
  7. 离散求边缘密度_求一把能退烧的机械键盘?——机械键盘购买“指北”
  8. android布局下划线设置,我可以在Android布局中为文本加下划线吗?
  9. 历史的天空-【1】配置
  10. S32k144SDK版本——FTM_IC输入捕获
  11. Java加密解密代码小记
  12. 群晖黑科技docker套件_群晖Docker玩法
  13. 触控笔有必要买吗?苹果平板触控笔排行榜
  14. 企业工商信息查询API开发文档
  15. 华为计算机平台芯片,华为连发两款AI芯片,计算力远超谷歌及英伟达
  16. JS里数组合并的几种方法
  17. Caffe 源码 - BatchNorm 层与 Scale 层
  18. 一次关于Uber的通宵抬杠
  19. [笔记]Windows核心编程《十九》DLL基础
  20. winscp连接nas root账户拒绝访问_树莓派 3B 结合 NextCloud PI 搭建皮米级 NAS 家庭储存...

热门文章

  1. 报错,> 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
  2. 罗振宇2021跨年演讲1:长大以后有多少责任和烦恼?
  3. Scala学习笔记06:自定义控制结构
  4. akka案例:统计单词个数
  5. 三角学——极坐标_2
  6. linux 显示套接字统计信息,Linux 命令 - ss: 查看套接字统计信息
  7. 2017.9.30 CF #R4 D 思考记录
  8. 【英语学习】【Level 07】U06 First Time L6 Not your typical experience
  9. 【英语学习】【English L06】U08 News L4 A piece of great news
  10. 四.3D-2D:PnP问题求解 线性法