#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ''
__author__ = 'wlc'
__mtime__ = '2017/9/04'
"""
import numpy as np
import randomclass Network(object):def __init__(self,sizes):#size神经元个数list[3,2,4]self.num_layers = len(sizes)#几层self.sizes = sizesself.biases = [np.random.randn(y,1) for y in sizes[1:]]#randn生成指定参数的矩阵 高斯分布正态分布均值为0方差为1 zip生成数对,zip([1,2],[2,3,4]) = [(1,2),(2,3)self.weights = [np.random.randn(y,x) for x,y in zip(sizes[:-1],sizes[1:])]#[1:]从第一个元素开始到最后一个元素,[:1]从开始元素到第一个结束不包含第一个元素def feedforward(self, a):  # y=Wx + bfor b, w in zip(self.biases, self.weights):a = sigmoid(np.dot(w, a) + b)return a  # 向量def cost_derivative(self, output_activations, y):return (output_activations - y)# """Return the vector of partial derivatives \partial C_x /# \partial a for the output activations."""def SGD(self, training_data, epoch, mini_batch_size, eta, test_data=None):if test_data: n_test = len(test_data)n = len(training_data)for j in xrange(epoch):random.shuffle(training_data)  # 洗牌打乱mini_batches = [training_data[k:k + mini_batch_size]for k in xrange(0, n, mini_batch_size)]  # 按照batch_size 大小依次将实例取出for mini_batch in mini_batches:self.update_mini_batch(mini_batch, eta)if test_data:print "Epoch {0}:{1} / {2}".format(j, self.evaluate(test_data), n_test)else:print "Epoch {0} complete".format(j)def update_mini_batch(self, mini_batch, eta):nabla_b = [np.zeors(b.shape) for b in self.biases]nabla_w = [np.zeros(w.shape) for w in self.weights]for x, y in mini_batch:delta_nabla_b, delta_nabla_w = self.backprop(x, y)  # 求出权重和偏置的偏导数nabla_b = [nb + dnb for nb, dnb in zip(nabla_b, delta_nabla_b)]  # 随机梯度下降使用mini_batch 的所有梯度累加然后求均值代替求导nabla_w = [nw + dnw for nw, dnw in zip(nabla_w, delta_nabla_w)]  # 累加mini_batch 数量的biases的偏导数代替逐个求导self.weights = [  # 随机梯度下降更新权重公式w - (eta / len(mini_batch)) * nwfor w, nw in zip(self.weights, nabla_w)]self.biases = [  # 更新偏置公式b - (eta / len(mini_batch)) * nbfor b, nb in zip(self.biases, nabla_b)]def evaluate(self, test_data):test_results = [(np.argmax(self.feedforward(x)), y)  # 对于手写体识别而言返回的是10维的向量,因此返回最大值得那一维的索引便是类别for (x, y) in test_data]return sum(int(x == y) for (x, y) in test_results)  # 统计测试集中预测正确的个数def backprop(self, x, y):nabla_b = [np.zeros(b.shape) for b in self.biases]nabla_w = [np.zeros(w.shape) for w in self.weights]# 正向 feedforwardactivation = xactivations = [x]  # 所有的activationszs = []  # 储存所有的Zfor b, w in zip(self.biases, self.weights):  # b w 一行一行的读取z = np.dot(w, activation) + bzs.append(z)activation = sigmoid(z)activations.append(activation)# 反向 backward pass#(对于y = x**2 而言delta y = 2x * delta x)因此对于最后的输出层delta x 就是预测值与真实值的差,2x就是对激活函数求导delta = self.cost_derivative(activations[-1], y) * sigmoid_prime(zs[-1])#对于输出层的deltanabla_b[-1] = deltanabla_w[-1] = np.dot(delta, activations[-2].transpose())for l in xrange(2, self.num_layers):z = zs[-1]sp = sigmoid_prime(z)delta = np.dot(self.weights[-l + 1].transpose(), delta)* spnabla_b[-l] = deltanabla_w[-l] = np.dot(delta, activations[-l +1].transpose())return (nabla_b, nabla_w)nn = Network([2,3,1])
print("#第一层到第二层的链接权重[2,3,1]")
print nn.weights#每个array行代表当前层所有神经元连接下一层某一个神经元的权重
print("#Biases")
print nn.biases#### Miscellaneous functions
def sigmoid(z):"""The sigmoid function."""return 1.0 / (1.0 + np.exp(-z))def sigmoid_prime(z):"""Derivative of the sigmoid function."""return sigmoid(z) * (1 - sigmoid(z))

  

转载于:https://www.cnblogs.com/wlc297984368/p/7479986.html

神经网络二(Neural Network)相关推荐

  1. python中forward的作用_基于numpy的前馈神经网络(feedforward neural network)

    *** 这几天在上Andrew Ng教授开的Coursera系列课程Deep Learning,总觉得光是看视频和做作业还不够,还是得自己动手写写代码,亲自实现课程里提到的算法内容,于是便有了这篇博客 ...

  2. 递归神经网络(Recursive Neural Network, RNN)

    信息往往还存在着诸如树结构.图结构等更复杂的结构.这就需要用到递归神经网络 (Recursive Neural Network, RNN),巧合的是递归神经网络的缩写和循环神经网络一样,也是RNN,递 ...

  3. 非常详细的讲解让你深刻理解神经网络NN(neural network)

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 什么是神经网络NN.人工神经网络ANN 神经元(神经网络的基本单元) 概念详解 ...

  4. 脉冲神经网络:MATLAB实现脉冲神经网络(Spiking Neural Network,SNN) 用于图像分类(提供MATLAB代码)

    一.脉冲神经网络 脉冲神经网络 (Spiking Neural Network,SNN) ,是第三代神经网络.其旨在弥合神经科学和机器学习之间的差距,使用最拟合生物神经元机制的模型来进行计算,更接近生 ...

  5. 循环神经网络(Recurrent Neural Network)详解

    循环神经网络(RNNs)是神经网络中一个大家族,它们主要用于文本.信号等序列相关的数据.常见的循环神经网络有长短期记忆网络(LSTM).门控循环单元网络(GRU)等,而这些循环神经网络都是在最早的一种 ...

  6. 卷积神经网络(Convolutional Neural Network, CNN)

    卷积神经网络(Convolutional Neural Network, CNN) 目录 卷积神经网络(Convolutional Neural Network, CNN) 概述: 结构: 卷积层:

  7. 深度学习之递归神经网络(Recurrent Neural Network,RNN)

    为什么有bp神经网络.CNN.还需要RNN? BP神经网络和CNN的输入输出都是互相独立的:但是实际应用中有些场景输出内容和之前的内 容是有关联的. RNN引入"记忆"的概念:递归 ...

  8. 什么是RNN?一文看懂强大的循环神经网络(Recurrent Neural Network, RNN)

    循环神经网络(Recurrent Neural Network,RNN)是一类用于处理序列数据的神经网络.所谓序列数据,即前面的输入和后面的输入是有关系的,如一个句子,或者视频帧.就像卷积网络是专门用 ...

  9. 深度学习基础--不同网络种类--尖峰神经网络/脉冲神经网络(spiking neural network, snn)

    尖峰神经网络/脉冲神经网络(spiking neural network, snn)   是三代神经网络模型,属于计算神经科学,动物的神经网络大多是脉冲神经网络.   资料不多,而且大多是外文   本 ...

  10. 小波神经网络wavelet neural network

    最近在看小波神经网络,感觉介绍的不是太全面.特做了本note,供自己和兴趣者学习. 参考文献: Wavelet Neural Network Using Multiple Wavelet Functi ...

最新文章

  1. 初级,用powerdesigner生成的sql创建access数据库
  2. cad加载插件快捷键命令_cad自动加载lsp插件,这一种方法你肯定没用过!
  3. Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌
  4. hash hashcode变化_Web安全 | 没想到 Hash 冲突还能这么玩,你的服务中招了吗?
  5. php7 电子书 下载,PHP 7: Real World Application Development
  6. 登录状态 token
  7. Maven打jar发布包的常用配置
  8. Linux学习(4)vim编辑器的安装使用
  9. 2020年HS芯片说明海思论坛
  10. bzoj 4484 [Jsoi2015]最小表示
  11. solidworks2022 无效的(不一致的)使用许可号码 问题解决
  12. hdu1576 A/B
  13. MATLAB作图时值为0的点不画出来
  14. JVM 判断对象已死,实践验证GC回收
  15. c语言实现 自动访问网址,使用C语言实现网站开发
  16. 火焰检测 python
  17. 忙忙碌碌缓慢进度 项目经理管理的4大误区
  18. 统信UOS操作系统 VS 银河麒麟操作系统
  19. SQL 与 MQL5: 与 SQLITE 数据库集成
  20. 警方提醒网民警惕网络诈骗七种作案手法

热门文章

  1. 我如何使用深度学习通过Fast.ai对医学图像进行分类
  2. 限制HTTP数据包发送Referer
  3. 线性回归预测PM2.5值
  4. PL/SQL编程:用Loop-exit-when-end循环算出5的阶乘
  5. Java培训哪家机构好
  6. leetcode--删除链表的倒数第N个节点--python
  7. 人工智能--野人过河
  8. 百度成立小度蓝牙联盟,DMA+小度App打造蓝牙语音风口
  9. 35.2. Subversion 版本控制
  10. 设置grep高亮显示匹配项