当前位置: 首页 > 编程日记 > 正文

神经网络二(Neural Network)

#!/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

相关文章:

要想成功 需要了解的东西

凭我工作的经历来看 在it界要想成功必须要做到以下几点。 1 基本的开发语言不一定精通,但是一定要熟练的使用。 2 对公的主营业务一定要熟悉,不但要熟悉,而且要烂熟于心。如果不能做到这一点,那么起码对自己负责的工作要做到烂熟…

合并下载的Solaris镜像为DVD文件的方法

有很多朋友想安装solaris10操作系统,但是没有系统盘或者在官方网站下载之后不会合成。经过多次试验之后现在把正确的方法写下,以方便大家的学习之用。1。先到官方网站下载最新的系统包,下载之后的软件包为:sol-10-u4-ga-x86-dvd-i…

oracle测试环境表空间清理

测试场景下,使用的oralce遇到表空间的占用超大,可以采用如下的方式进行空间的清理 首先使用sqlplus连接数据库sqlplus sys/passwordorcl as sysdba 之类进行数据库的连接没然后进行如下的操作 ##创建表空间对于自己的测试库和表等最好都建立自己的表空间…

Google Chrome(谷歌浏览器) 发布下载

Google Chrome 下载地址:http://www.google.com/chrome 刚刚装上,还没怎么用,说一下大概印象,整体非常简洁,只有两个菜单选项。访问上明显感觉很快,比 Firefox 快,也比 IE7快;对网页…

实验 5   数据的完整性管理

实验 5 数据的完整性管理 一、实验目的 掌握实体完整性的实现方法。掌握用户定义完整性的实现方法。掌握参照完整性的方法。二、实验内容 数据库的完整性设置。三、实验步骤 可视化界面的操作方法:实体完整性 将 student 表的“sno”字段设为主键:在表…

16-acrobat por 简单使用指南

用于pdf编辑,这里我主要讲下图片的切割和保存,以及合并: 切割选中区域双击 合并的话,在编辑界面选中对象,复制,在另一个pdf的编辑界面粘贴,并挪动位置: 转载于:https://www.cnblogs.…

可突破任意ARP防火墙,以限制流量为目标的简单网络管理软件

以下消息来自幻影论坛[Ph4nt0m]邮件组软件说明:可突破任意ARP防火墙,以限制流量为目标的简单网络管理软件。使用方法:1.在参数设置中选择好工作网卡;2.检查网关信息和本机信息是否正确,如果不正确,请手动输…

OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法...

函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界。 cv2.boundingRect(array) -> retval 参数: array - 灰度图像&#xff…

实验1 应用SQL Server进行数据定义和管理

实验1 应用SQL Server进行数据定义和管理 【实验目的】 1)熟悉SQL Server的配置和管理。 2)掌握数据库的定义和修改方法。 3)掌握表的定义和修改方法。 4)掌握使用SQL语句进行数据管理的方法。 【实验环境】 SQL Server 20…

谷歌Chrome浏览器发布

谷歌已提前启用了浏览器Google Chrome的官方网站gears.google.com/chrome/,今天该浏览器的Windows版本首发。在此以前,谷歌与微软之间的斗争更象是“冷战”,大多局限于谷歌开发小型的、基于网络的软件,与微软占主导地位的Word、Po…

【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索

题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”…

Creating a LINQ Enabled ASP.NET Web application template using C#.[转]

原文地址:http://www.wwwcoder.com/Weblogs/tabid/283/EntryID/839/Default.aspx其他相关地址:Building and using a LINQ for SQL Class Library with ASP.NET 2.0 1. Install Visual Studio 2005 RTM. 2. Download and install "…

深入理解Java线程池:ThreadPoolExecutor

线程池介绍 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题: 如果并发的请求数量非常多,但每个线程执行的时间…

[zt]petshop4.0 详解之八(PetShop表示层设计)

代码中,InsertUser()方法就是负责用户的创建,而在之前则需要判断创建的用户是否已经存在。InsertUser()方法的定义如下: privatestaticboolInsertUser(OracleTransaction transaction, intuserId, stringemail, stringpassword, intpassForma…

Install Java 8 Ubuntu

sudo add-apt-repository ppa:webupd8team/javasudo apt-get -y update sudo apt-get -y install oracle-java8-installer sudo vim /etc/environment Add this at the end of the file JAVA_HOME"/usr/lib/jvm/java-8-oracle" source /etc/environment转载于:https:…

实验2  使用T-SQL编写程序

实验2 使用T-SQL编写程序 【实验目的】 1)掌握常用函数的使用方法。 2)掌握流程控制语句的使用方法。 【实验环境】 SQL Server 2012 Express(或SQL Server 2017 Express) 【实验重点及难点】 1&…

超酷flash光芒光线特效

http://thefwa.com/ 一个不错的英文设计展示站点 超酷flash光芒光线特效 http://www.zcool.com.cn/flash/light/page_1.html

实验3  数据库综合查询

实验3 数据库综合查询 一、实验目的 掌握SELECT语句的基本语法和查询条件表示方法;掌握查询条件种类和表示方法;掌握连接查询的表示及使用;掌握嵌套查询的表示及使用;了解集合查询的表示及使用。 二、实验环境 已安装SQL Serv…

Find Large Files in Linux

https://www.rosehosting.com/blog/find-large-files-linux/转载于:https://www.cnblogs.com/WCFGROUP/p/10328469.html

Linux统计行数命令wc(转)

Linux wc命令用于计算字数。 利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。 语法 wc [-clw][--help][--version][文件...] 参数 -c或--bytes或--chars …

There is no Citrix MetaFrame server configured on the specified address错误的解决方法

环境:windows server 2003 enterprise Citrix MetaFrame XP Server for Windows with Feature Release 3MetaFrame XP 1.0 Service Pack 4 for Windows 2003公网IP内网IP(有防火墙) 客户端:windows xp sp2Citrix MetaFrame Program Neighborhood Version 9.00.32649 错误描述:使…

Cisco交换机解决网络蠕虫病毒***问题

Cisco交换机解决网络蠕虫病毒***问题今年来网络蠕虫泛滥给ISP和企业都造成了巨大损失,截至目前已发现近百万种病毒及***。受感染的网络基础设施遭到破坏,以Sql Slammer为例,它发作时会造成丢包率为30%。我们如何在LAN上防范蠕虫?大…

实验4  数据的安全性管理

实验4 数据的安全性管理 一、实验目的 掌握SQL Server身份验证模式。掌握创建登录账户、数据库用户的方法。掌握使用角色实现数据库安全性的方法。掌握权限的分配。 二、实验内容 1、设置身份验证模式:Windows身份验证模式和混合模验证模式。 2、设置登录账户 …

scala构建工具sbt使用介绍

sbt工具下载及说明: https://www.scala-sbt.org/0.13/docs/zh-cn/Installing-sbt-on-Windows.html sbt是交互式构建工具,使用scala定义任务并执行它们 目录下启动 sbt,然后执行 run 命令进入到 sbt 的交互式命令 $ mkdir hello $ cd hello $ …

读书笔记--C陷阱与缺陷(三)

第三章 1. 指针与数组 书中强调C中数组注意的两点: 1) C语言只有一维数组,但是数组元素可以是任何类型对象,是另外一个数组时就产生了二维数组。数组大小是常数(但GCC实现了变长数组。。) 2) 一个数组只能做两…

[导入]儿子语录

2008.09.16:笑脸,笑脸,不笑脸,不笑脸,不高兴脸,不高兴脸。2008.09.19:爸爸是黄毛毛虫,我是绿毛毛虫,妈妈是紫毛毛虫,奶奶是咖啡色毛毛虫,太太是白…

ISA2006标准版,本地主机不能上网问题的解决一例

今天,帮一位朋友解决ISA SERVER2006标准版本地主机不能上网的问题,中间经历了一些困难,有点意思,故写了下来,供各位参考分享。一、安装环境:windows server 2003 sp2isa server 2006 标准版双网卡 外网卡固…

第8章系统服务(简易音频播放器的实现)

开发一个简易音乐播放器,要求实现: 综合使用Service,BroadCast,ContentProvider等组件实现后台播放。 播放和暂停、上一首、下一首、停止;后台播放功能, 按下返回键退出应用后再次打开应用,UI 显示应能与当…

await使用中的阻塞和并发(一)

好吧,不加点陈述不让发首页。那我们来陈述一下本篇提到的问题和对应的方法。 在.NET4.5中,我们可以配合使用async和await两个关键字,来以写同步代码的方式,实现异步的操作。 好处我目前看来有两点: 1.不会阻塞UI线程。…

中国经济是前所未有二元经济(转)

今天的中国是一个前所未有的二元经济,而且是三七开的二元经济,我国这么多年的经济发展,每一年GDP以10%的成长率增长的原因,就是二元经济的过热部门推动的,因此我们GDP的组成是非常扭曲的,超过一半都是固定资…