python实现ann的简单介绍

本文目录一览:

如何用神经网络实现连续型变量的回归预测?

神经网络最开始是机器学习的一种模型,但其训练的时间和其他几种模型相比不占优势,且结果也不尽人意,所以一直没有被广泛使用。但随着数学的深入研究以及计算机硬件质量的提高,尤其是GPU的出现,给深度学习的广泛应用提供了基础。GPU最初是为了给游戏玩家带来高质量的视觉体验,由于其处理矩阵运算的能力特别优秀,也被用于深度学习中模型的训练,以往数十天才能训练好的模型在GPU上训练几天就可以训练好,大大减少了深度学习的训练时间,因而深度学习的应用越来越多。

神经网络作为深度学习最主要的模型,人工神经网络ANN是最基础的神经网络结构,其工作原理很像人类大脑中的神经。神经元是ANN的工作单元,每个神经元含有权重和偏置,神经元将上一层神经元传递过来的值通过权重和偏置的运算,得到新的结果,将该结果传递给下一层神经元,通过不断的传递,最终获得输出结果。

要想用神经网络实现连续型变量的回归预测,需要将该N维变量的数据作为输入,中间再设置隐藏层和每一层的神经元个数,至于隐藏层的层数则需要多次训练才能得出较准确的层数。而最后输出层的值和实际变量的值会有误差,神经网络会通过不断地训练,更改权重和偏置的值来使误差尽可能的小,当误差小到一定程度,该神经网络的回归预测就算成功了。

通常使用Python来搭建神经网络,Python自带深度学习的一些库,在进行回归预测时,我们只需用调用函数,设定几个参数,如隐藏层层数和神经元个数等,剩下的就是等模型自行训练,最终便能完成回归预测,非常的方便。

计算机python的实现方式都有哪些?

虽然官方 Python 实现差不多得到最广泛的欢迎,但也有一些其他实现对特定领域的用户来说更具吸引力。

知名的实现包括:

CPython

这是最早出现并持续维护的 Python 实现,以 C 语言编写。新的语言特性通常在此率先添加。

Jython

以 Java 语言编写的 Python 实现。此实现可以作为 Java 应用的一个脚本语言,或者可以用来创建需要 Java 类库支持的应用。想了解更多信息可访问 Jython 网站。

Python for .NET

此实现实际上使用了 CPython 实现,但是属于 .NET 托管应用并且可以引入 .NET 类库。它的创造者是 Brian Lloyd。想了解详情可访问 Python for .NET 主页。

IronPython

另一个 .NET 的 Python 实现,与 Python.NET 不同点在于它是生成 IL 的完全 Python 实现,并且将 Python 代码直接编译为 .NET 程序集。它的创造者就是当初创造 Jython 的 Jim Hugunin。想了解详情可访问 IronPython 网站。

PyPy

完全使用 Python 语言编写的 Python 实现。它支持多个其他实现所没有的高级特性,例如非栈式支持和 JIT 编译器等。此项目的目标之一是通过允许方便地修改解释器 (因为它是用 Python 编写的),鼓励该对语言本身进行试验。想了解详情可访问 PyPy 项目主页。

以上这些实现都可能在某些方面与此参考文档手册的描述有所差异,或是引入了超出标准 Python 文档范围的特定信息。请参考它们各自的专门文档,以确定你正在使用的这个实现有哪些你需要了解的东西。

以 Java 语言编写的 Python 实现。此实现可以作为 Java 应用的一个脚本语言,或者可以用来创建需要 Java 类库支持的应用。想了解更多信息可访问 Jython 网站。

Python for .NET

此实现实际上使用了 CPython 实现,但是属于 .NET 托管应用并且可以引入 .NET 类库。它的创造者是 Brian Lloyd。想了解详情可访问 Python for .NET 主页。

IronPython

另一个 .NET 的 Python 实现,与 Python.NET 不同点在于它是生成 IL 的完全 Python 实现,并且将 Python 代码直接编译为 .NET 程序集。它的创造者就是当初创造 Jython 的 Jim Hugunin。想了解详情可访问 IronPython 网站。

python 常用的系统函数有哪些

1.常用内置函数:(不用import就可以直接使用)

help(obj) 在线帮助, obj可是任何类型

callable(obj) 查看一个obj是不是可以像函数一样调用

repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝

eval_r(str) 表示合法的python表达式,返回这个表达式

dir(obj) 查看obj的name space中可见的name

hasattr(obj,name) 查看一个obj的name space中是否有name

getattr(obj,name) 得到一个obj的name space中的一个name

setattr(obj,name,value) 为一个obj的name space中的一个name指向vale这个object

delattr(obj,name) 从obj的name space中删除一个name

vars(obj) 返回一个object的name space。用dictionary表示

locals() 返回一个局部name space,用dictionary表示

globals() 返回一个全局name space,用dictionary表示

type(obj) 查看一个obj的类型

isinstance(obj,cls) 查看obj是不是cls的instance

issubclass(subcls,supcls) 查看subcls是不是supcls的子类

类型转换函数

chr(i) 把一个ASCII数值,变成字符

ord(i) 把一个字符或者unicode字符,变成ASCII数值

oct(x) 把整数x变成八进制表示的字符串

hex(x) 把整数x变成十六进制表示的字符串

str(obj) 得到obj的字符串描述

list(seq) 把一个sequence转换成一个list

tuple(seq) 把一个sequence转换成一个tuple

dict(),dict(list) 转换成一个dictionary

int(x) 转换成一个integer

long(x) 转换成一个long interger

float(x) 转换成一个浮点数

complex(x) 转换成复数

max(…) 求最大值

min(…) 求最小值

用于执行程序的内置函数

complie 如果一段代码经常要使用,那么先编译,再运行会更快。

2.和操作系统相关的调用

系统相关的信息模块 import sys

sys.argv是一个list,包含所有的命令行参数.

sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.

sys.stdin.readline() 从标准输入读一行 sys.stdout.write(“a”) 屏幕输出a

sys.exit(exit_code) 退出程序

sys.modules 是一个dictionary,表示系统中所有可用的module

sys.platform 得到运行的操作系统环境

sys.path 是一个list,指明所有查找module,package的路径.

操作系统相关的调用和操作 import os

os.environ 一个dictionary 包含环境变量的映射关系 os.environ[“HOME”] 可以得到环境变量HOME的值

os.chdir(dir) 改变当前目录 os.chdir(‘d:\\outlook’) 注意windows下用到转义

os.getcwd() 得到当前目录

os.getegid() 得到有效组id os.getgid() 得到组id

os.getuid() 得到用户id os.geteuid() 得到有效用户id

os.setegid os.setegid() os.seteuid() os.setuid()

os.getgruops() 得到用户组名称列表

os.getlogin() 得到用户登录名称

os.getenv 得到环境变量

os.putenv 设置环境变量

os.umask 设置umask

os.system(cmd) 利用系统调用,运行cmd命令

操作举例:

os.mkdir(‘/tmp/xx’) os.system(“echo ‘hello’ /tmp/xx/a.txt”) os.listdir(‘/tmp/xx’)

os.rename(‘/tmp/xx/a.txt’,’/tmp/xx/b.txt’) os.remove(‘/tmp/xx/b.txt’) os.rmdir(‘/tmp/xx’)

用python编写一个简单的shell

#!/usr/bin/python

import os, sys

cmd = sys.stdin.readline()

while cmd:

os.system(cmd)

cmd = sys.stdin.readline()

用os.path编写平台无关的程序

os.path.abspath(“1.txt”) == os.path.join(os.getcwd(), “1.txt”)

os.path.split(os.getcwd()) 用于分开一个目录名称中的目录部分和文件名称部分。

os.path.join(os.getcwd(), os.pardir, ‘a’, ‘a.doc’) 全成路径名称.

os.pardir 表示当前平台下上一级目录的字符 ..

os.path.getctime(“/root/1.txt”) 返回1.txt的ctime(创建时间)时间戳

os.path.exists(os.getcwd()) 判断文件是否存在

os.path.expanduser(‘~/dir’) 把~扩展成用户根目录

os.path.expandvars(‘$PATH’) 扩展环境变量PATH

os.path.isfile(os.getcwd()) 判断是否是文件名,1是0否

os.path.isdir(‘c:\Python26\temp’) 判断是否是目录,1是0否

os.path.islink(‘/home/huaying/111.sql’) 是否是符号连接 windows下不可用

os.path.ismout(os.getcwd()) 是否是文件系统安装点 windows下不可用

os.path.samefile(os.getcwd(), ‘/home/huaying’) 看看两个文件名是不是指的是同一个文件

os.path.walk(‘/home/huaying’, test_fun, “a.c”)

遍历/home/huaying下所有子目录包括本目录,对于每个目录都会调用函数test_fun.

例:在某个目录中,和他所有的子目录中查找名称是a.c的文件或目录。

def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是访问的目录名称

if filename in names: //names是一个list,包含dirname目录下的所有内容

print os.path.join(dirname, filename)

os.path.walk(‘/home/huaying’, test_fun, “a.c”)

文件操作

打开文件

f = open(“filename”, “r”) r只读 w写 rw读写 rb读二进制 wb写二进制 w+写追加

读写文件

f.write(“a”) f.write(str) 写一字符串 f.writeline() f.readlines() 与下read类同

f.read() 全读出来 f.read(size) 表示从文件中读取size个字符

f.readline() 读一行,到文件结尾,返回空串. f.readlines() 读取全部,返回一个list. list每个元素表示一行,包含”\n”\

f.tell() 返回当前文件读取位置

f.seek(off, where) 定位文件读写位置. off表示偏移量,正数向文件尾移动,负数表示向开头移动。

where为0表示从开始算起,1表示从当前位置算,2表示从结尾算.

f.flush() 刷新缓存

关闭文件

f.close()

regular expression 正则表达式 import re

简单的regexp

p = re.compile(“abc”) if p.match(“abc”) : print “match”

上例中首先生成一个pattern(模式),如果和某个字符串匹配,就返回一个match object

除某些特殊字符metacharacter元字符,大多数字符都和自身匹配。

这些特殊字符是 。^ $ * + ? { [ ] \ | ( )

字符集合(用[]表示)

列出字符,如[abc]表示匹配a或b或c,大多数metacharacter在[]中只表示和本身匹配。例:

a = “.^$*+?{\\|()” 大多数metachar在[]中都和本身匹配,但”^[]\”不同

p = re.compile(“[“+a+”]”)

for i in a:

if p.match(i):

print “[%s] is match” %i

else:

print “[%s] is not match” %i

在[]中包含[]本身,表示”[“或者”]”匹配.用

表示.

^出现在[]的开头,表示取反.[^abc]表示除了a,b,c之外的所有字符。^没有出现在开头,即于身身匹配。

-可表示范围.[a-zA-Z]匹配任何一个英文字母。[0-9]匹配任何数字。

\在[]中的妙用。

\d [0-9]

\D [^0-9]

\s [ \t\n\r\f\v]

\S [^ \t\n\r\f\v]

\w [a-zA-Z0-9_]

\W [^a-zA-Z0-9_]

\t 表示和tab匹配, 其他的都和字符串的表示法一致

\x20 表示和十六进制ascii 0x20匹配

有了\,可以在[]中表示任何字符。注:单独的一个”.”如果没有出现[]中,表示出了换行\n以外的匹配任何字符,类似[^\n].

regexp的重复

{m,n}表示出现m个以上(含m个),n个以下(含n个). 如ab{1,3}c和abc,abbc,abbbc匹配,不会与ac,abbbc匹配。

m是下界,n是上界。m省略表下界是0,n省略,表上界无限大。

*表示{,} +表示{1,} ?表示{0,1}

最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一个?.

match object的end可以得到匹配的最后一个字符的位置。

re.compile(“a*”).match(‘aaaa’).end() 4 最大匹配

re.compile(“a*?”).match(‘aaaa’).end() 0 最小匹配

使用原始字符串

字符串表示方法中用\\表示字符\.大量使用影响可读性。

解决方法:在字符串前面加一个r表示raw格式。

a = r”\a” print a 结果是\a

a = r”\”a” print a 结果是\”a

使用re模块

先用re.compile得到一个RegexObject 表示一个regexp

后用pattern的match,search的方法,得到MatchObject

再用match object得到匹配的位置,匹配的字符串等信息

RegxObject常用函数:

re.compile(“a”).match(“abab”) 如果abab的开头和re.compile(“a”)匹配,得到MatchObject

_sre.SRE_Match object at 0x81d43c8

print re.compile(“a”).match(“bbab”)

None 注:从str的开头开始匹配

re.compile(“a”).search(“abab”) 在abab中搜索第一个和re_obj匹配的部分

_sre.SRE_Match object at 0x81d43c8

print re.compile(“a”).search(“bbab”)

_sre.SRE_Match object at 0x8184e18 和match()不同,不必从开头匹配

re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.

返回一个tuple,其中元素是匹配的字符串.

MatchObject的常用函数

m.start() 返回起始位置,m.end()返回结束位置(不包含该位置的字符).

m.span() 返回一个tuple表示(m.start(), m.end())

m.pos(), m.endpos(), m.re(), m.string()

m.re().search(m.string(), m.pos(), m.endpos()) 会得到m本身

m.finditer()可以返回一个iterator,用来遍历所有找到的MatchObject.

for m in re.compile(“[ab]”).finditer(“tatbxaxb”):

print m.span()

高级regexp

| 表示联合多个regexp. A B两个regexp,A|B表示和A匹配或者跟B匹配.

^ 表示只匹配一行的开始行首,^只有在开头才有此特殊意义。

$ 表示只匹配一行的结尾

\A 表示只匹配第一行字符串的开头 ^匹配每一行的行首

\Z 表示只匹配行一行字符串的结尾 $匹配第一行的行尾

\b 只匹配词的边界 例:\binfo\b 只会匹配”info” 不会匹配information

\B 表示匹配非单词边界

示例如下:

print re.compile(r”\binfo\b”).match(“info “) #使用raw格式 \b表示单词边界

_sre.SRE_Match object at 0x817aa98

print re.compile(“\binfo\b”).match(“info “) #没有使用raw \b表示退格符号

None

print re.compile(“\binfo\b”).match(“\binfo\b “)

_sre.SRE_Match object at 0x8174948

分组(Group) 示例:re.compile(“(a(b)c)d”).match(“abcd”).groups() (‘abc’, ‘b’)

#!/usr/local/bin/python

import re

x = “””

name: Charles

Address: BUPT

name: Ann

Address: BUPT

“””

#p = re.compile(r”^name:(.*)\n^Address:(.*)\n”, re.M)

p = re.compile(r”^name:(?P.*)\n^Address:(?P.*)\n”, re.M)

for m in p.finditer(x):

print m.span()

print “here is your friends list”

print “%s, %s”%m.groups()

Compile Flag

用re.compile得到RegxObject时,可以有一些flag用来调整RegxObject的详细特征.

DOTALL, S 让.匹配任意字符,包括换行符\n

IGNORECASE, I 忽略大小写

LOCALES, L 让\w \W \b \B和当前的locale一致

MULTILINE, M 多行模式,只影响^和$(参见上例)

VERBOSE, X verbose模式

如何利用python语言实现机器学习算法

基于以下三个原因,我们选择Python作为实现机器学习算法的编程语言:(一) Python的语法清晰;(二) 易于操作纯文本文件;(三) 使用广泛,存在大量的开发文档。 可执行伪代码 Python具有清晰的语法结构,大家也把它称作可执行伪代码(executable pseudo-code)。默认安装的Python开发环境已经附带了很多高级数据类型,如列表、元组、字典、集合、队列等,无需进一步编程就可以使用这些数据类型的操作。使用这些数据类型使得实现抽象的数学概念非常简单。此外,读者还可以使用自己熟悉的编程风格,如面向对象编程、面向过程编程、或者函数式编程。不熟悉Python的读者可以参阅附录A,该附录详细介绍了Python语言、Python使用的数据类型以及安装指南。 Python语言处理和操作文本文件非常简单,非常易于处理非数值型数据。Python语言提供了丰富的正则表达式函数以及很多访问Web页面的函数库,使得从HTML中提取数据变得非常简单直观。 Python比较流行 Python语言使用广泛,代码范例也很多,便于读者快速学习和掌握。此外,在开发实际应用程序时,也可以利用丰富的模块库缩短开发周期。 在科学和金融领域,Python语言得到了广泛应用。SciPy和NumPy等许多科学函数库都实现了向量和矩阵操作,这些函数库增加了代码的可读性,学过线性代数的人都可以看懂代码的实际功能。另外,科学函数库SciPy和NumPy使用底层语言(C和Fortran)编写,提高了相关应用程序的计算性能。本书将大量使用Python的NumPy。 Python的科学工具可以与绘图工具Matplotlib协同工作。Matplotlib可以绘制二D、三D图形,也可以处理科学研究中经常使用到的图形,所以本书也将大量使用Matplotlib。 Python开发环境还提供了交互式shell环境,允许用户开发程序时查看和检测程序内容。 Python开发环境将来还会集成Pylab模块,它将NumPy、SciPy和Matplotlib合并为一个开发环境。在本书写作时,Pylab还没有并入Python环境,但是不远的将来我们肯定可以在Python开发环境找到它。 Python语言的特色 诸如MATLAB和Mathematica等高级程序语言也允许用户执行矩阵操作,MATLAB甚至还有许多内嵌的特征可以轻松地构造机器学习应用,而且MATLAB的运算速度也很快。然而MATLAB的不足之处是软件费用太高,单个软件授权就要花费数千美元。虽然也有适合MATLAB的第三方插件,但是没有一个有影响力的大型开源项目。 Java和C等强类型程序设计语言也有矩阵数学库,然而对于这些程序设计语言来说,最大的问题是即使完成简单的操作也要编写大量的代码。程序员首先需要定义变量的类型,对于Java来说,每次封装属性时还需要实现getter和setter方法。另外还要记着实现子类,即使并不想使用子类,也必须实现子类方法。为了完成一个简单的工作,我们必须花费大量时间编写了很多无用冗长的代码。Python语言则与Java和C完全不同,它清晰简练,而且易于理解,即使不是编程人员也能够理解程序的含义,而Java和C对于非编程人员则像天书一样难于理解。 所有人在小学二年级已经学会了写作,然而大多数人必须从事其他更重要的工作。 ——鲍比·奈特 也许某一天,我们可以在这句话中将“写作”替代为“编写代码”,虽然有些人对于编写代码很感兴趣,但是对于大多数人来说,编程仅是完成其他任务的工具而已。Python语言是高级编程语言,我们可以花费更多的时间处理数据的内在含义,而无须花费太多精力解决计算机如何得到数据结果。Python语言使得我们很容易表达自己的目的。 Python语言的缺点 Python语言唯一的不足是性能问题。Python程序运行的效率不如Java或者C代码高,但是我们可以使用Python调用C编译的代码。这样,我们就可以同时利用C和Python的优点,逐步地开发机器学习应用程序。我们可以首先使用Python编写实验程序,如果进一步想要在产品中实现机器学习,转换成C代码也不困难。如果程序是按照模块化原则组织的,我们可以先构造可运行的Python程序,然后再逐步使用C代码替换核心代码以改进程序的性能。C++ Boost库就适合完成这个任务,其他类似于Cython和PyPy的工具也可以编写强类型的Python代码,改进一般Python程序的性能。 如果程序的算法或者思想有缺陷,则无论程序的性能如何,都无法得到正确的结果。如果解决问题的思想存在问题,那么单纯通过提高程序的运行效率,扩展用户规模都无法解决这个核心问题。从这个角度来看,Python快速实现系统的优势就更加明显了,我们可以快速地检验算法或者思想是否正确,如果需要,再进一步优化代码

python把一个字符串列表写入txt文件,并保证每个字符串占用一行且没有其他符号(例如[]‘’空格)

代码如下:

#coding=utf-8

a = [‘zali’,’sili’,’ann’]

with open(‘test.txt’, ‘w’) as f:

    for i in a:

        f.write(i + ‘\n’)

运行结果

怎样用python构建一个卷积神经网络模型

上周末利用python简单实现了一个卷积神经网络,只包含一个卷积层和一个maxpooling层,pooling层后面的多层神经网络采用了softmax形式的输出。实验输入仍然采用MNIST图像使用10个feature map时,卷积和pooling的结果分别如下所示。

部分源码如下:

[python] view plain copy

#coding=utf-8

””’

Created on 2014年11月30日

@author: Wangliaofan

”’

import numpy

import struct

import matplotlib.pyplot as plt

import math

import random

import copy

#test

from BasicMultilayerNeuralNetwork import BMNN2

def sigmoid(inX):

if 1.0+numpy.exp(-inX)== 0.0:

return 999999999.999999999

return 1.0/(1.0+numpy.exp(-inX))

def difsigmoid(inX):

return sigmoid(inX)*(1.0-sigmoid(inX))

def tangenth(inX):

return (1.0*math.exp(inX)-1.0*math.exp(-inX))/(1.0*math.exp(inX)+1.0*math.exp(-inX))

def cnn_conv(in_image, filter_map,B,type_func=’sigmoid’):

#in_image[num,feature map,row,col]=in_image[Irow,Icol]

#features map[k filter,row,col]

#type_func[‘sigmoid’,’tangenth’]

#out_feature[k filter,Irow-row+1,Icol-col+1]

shape_image=numpy.shape(in_image)#[row,col]

#print “shape_image”,shape_image

shape_filter=numpy.shape(filter_map)#[k filter,row,col]

if shape_filter[1]shape_image[0] or shape_filter[2]shape_image[1]:

raise Exception

shape_out=(shape_filter[0],shape_image[0]-shape_filter[1]+1,shape_image[1]-shape_filter[2]+1)

out_feature=numpy.zeros(shape_out)

k,m,n=numpy.shape(out_feature)

for k_idx in range(0,k):

#rotate 180 to calculate conv

c_filter=numpy.rot90(filter_map[k_idx,:,:], 2)

for r_idx in range(0,m):

for c_idx in range(0,n):

#conv_temp=numpy.zeros((shape_filter[1],shape_filter[2]))

conv_temp=numpy.dot(in_image[r_idx:r_idx+shape_filter[1],c_idx:c_idx+shape_filter[2]],c_filter)

sum_temp=numpy.sum(conv_temp)

if type_func==’sigmoid’:

out_feature[k_idx,r_idx,c_idx]=sigmoid(sum_temp+B[k_idx])

elif type_func==’tangenth’:

out_feature[k_idx,r_idx,c_idx]=tangenth(sum_temp+B[k_idx])

else:

raise Exception

return out_feature

def cnn_maxpooling(out_feature,pooling_size=2,type_pooling=”max”):

k,row,col=numpy.shape(out_feature)

max_index_Matirx=numpy.zeros((k,row,col))

out_row=int(numpy.floor(row/pooling_size))

out_col=int(numpy.floor(col/pooling_size))

out_pooling=numpy.zeros((k,out_row,out_col))

for k_idx in range(0,k):

for r_idx in range(0,out_row):

for c_idx in range(0,out_col):

temp_matrix=out_feature[k_idx,pooling_size*r_idx:pooling_size*r_idx+pooling_size,pooling_size*c_idx:pooling_size*c_idx+pooling_size]

out_pooling[k_idx,r_idx,c_idx]=numpy.amax(temp_matrix)

max_index=numpy.argmax(temp_matrix)

#print max_index

#print max_index/pooling_size,max_index%pooling_size

max_index_Matirx[k_idx,pooling_size*r_idx+max_index/pooling_size,pooling_size*c_idx+max_index%pooling_size]=1

return out_pooling,max_index_Matirx

def poolwithfunc(in_pooling,W,B,type_func=’sigmoid’):

k,row,col=numpy.shape(in_pooling)

out_pooling=numpy.zeros((k,row,col))

for k_idx in range(0,k):

for r_idx in range(0,row):

for c_idx in range(0,col):

out_pooling[k_idx,r_idx,c_idx]=sigmoid(W[k_idx]*in_pooling[k_idx,r_idx,c_idx]+B[k_idx])

return out_pooling

#out_feature is the out put of conv

def backErrorfromPoolToConv(theta,max_index_Matirx,out_feature,pooling_size=2):

k1,row,col=numpy.shape(out_feature)

error_conv=numpy.zeros((k1,row,col))

k2,theta_row,theta_col=numpy.shape(theta)

if k1!=k2:

raise Exception

for idx_k in range(0,k1):

for idx_row in range( 0, row):

for idx_col in range( 0, col):

error_conv[idx_k,idx_row,idx_col]=\

max_index_Matirx[idx_k,idx_row,idx_col]*\

float(theta[idx_k,idx_row/pooling_size,idx_col/pooling_size])*\

difsigmoid(out_feature[idx_k,idx_row,idx_col])

return error_conv

def backErrorfromConvToInput(theta,inputImage):

k1,row,col=numpy.shape(theta)

#print “theta”,k1,row,col

i_row,i_col=numpy.shape(inputImage)

if rowi_row or col i_col:

raise Exception

filter_row=i_row-row+1

filter_col=i_col-col+1

detaW=numpy.zeros((k1,filter_row,filter_col))

#the same with conv valid in matlab

for k_idx in range(0,k1):

for idx_row in range(0,filter_row):

for idx_col in range(0,filter_col):

subInputMatrix=inputImage[idx_row:idx_row+row,idx_col:idx_col+col]

#print “subInputMatrix”,numpy.shape(subInputMatrix)

#rotate theta 180

#print numpy.shape(theta)

theta_rotate=numpy.rot90(theta[k_idx,:,:], 2)

#print “theta_rotate”,theta_rotate

dotMatrix=numpy.dot(subInputMatrix,theta_rotate)

detaW[k_idx,idx_row,idx_col]=numpy.sum(dotMatrix)

detaB=numpy.zeros((k1,1))

for k_idx in range(0,k1):

detaB[k_idx]=numpy.sum(theta[k_idx,:,:])

return detaW,detaB

def loadMNISTimage(absFilePathandName,datanum=60000):

images=open(absFilePathandName,’rb’)

buf=images.read()

index=0

magic, numImages , numRows , numColumns = struct.unpack_from(‘IIII’ , buf , index)

print magic, numImages , numRows , numColumns

index += struct.calcsize(‘IIII’)

if magic != 2051:

raise Exception

datasize=int(784*datanum)

datablock=””+str(datasize)+”B”

#nextmatrix=struct.unpack_from(‘47040000B’ ,buf, index)

nextmatrix=struct.unpack_from(datablock ,buf, index)

nextmatrix=numpy.array(nextmatrix)/255.0

#nextmatrix=nextmatrix.reshape(numImages,numRows,numColumns)

#nextmatrix=nextmatrix.reshape(datanum,1,numRows*numColumns)

nextmatrix=nextmatrix.reshape(datanum,1,numRows,numColumns)

return nextmatrix, numImages

def loadMNISTlabels(absFilePathandName,datanum=60000):

labels=open(absFilePathandName,’rb’)

buf=labels.read()

index=0

magic, numLabels  = struct.unpack_from(‘II’ , buf , index)

print magic, numLabels

index += struct.calcsize(‘II’)

if magic != 2049:

raise Exception

datablock=””+str(datanum)+”B”

#nextmatrix=struct.unpack_from(‘60000B’ ,buf, index)

nextmatrix=struct.unpack_from(datablock ,buf, index)

nextmatrix=numpy.array(nextmatrix)

return nextmatrix, numLabels

def simpleCNN(numofFilter,filter_size,pooling_size=2,maxIter=1000,imageNum=500):

decayRate=0.01

MNISTimage,num1=loadMNISTimage(“F:\Machine Learning\UFLDL\data\common\\train-images-idx3-ubyte”,imageNum)

print num1

row,col=numpy.shape(MNISTimage[0,0,:,:])

out_Di=numofFilter*((row-filter_size+1)/pooling_size)*((col-filter_size+1)/pooling_size)

MLP=BMNN2.MuiltilayerANN(1,[128],out_Di,10,maxIter)

MLP.setTrainDataNum(imageNum)

MLP.loadtrainlabel(“F:\Machine Learning\UFLDL\data\common\\train-labels-idx1-ubyte”)

MLP.initialweights()

#MLP.printWeightMatrix()

rng = numpy.random.RandomState(23455)

W_shp = (numofFilter, filter_size, filter_size)

W_bound = numpy.sqrt(numofFilter * filter_size * filter_size)

W_k=rng.uniform(low=-1.0 / W_bound,high=1.0 / W_bound,size=W_shp)

B_shp = (numofFilter,)

B= numpy.asarray(rng.uniform(low=-.5, high=.5, size=B_shp))

cIter=0

while cItermaxIter:

cIter += 1

ImageNum=random.randint(0,imageNum-1)

conv_out_map=cnn_conv(MNISTimage[ImageNum,0,:,:], W_k, B,”sigmoid”)

out_pooling,max_index_Matrix=cnn_maxpooling(conv_out_map,2,”max”)

pool_shape = numpy.shape(out_pooling)

MLP_input=out_pooling.reshape(1,1,out_Di)

#print numpy.shape(MLP_input)

DetaW,DetaB,temperror=MLP.backwardPropogation(MLP_input,ImageNum)

if cIter%50 ==0 :

print cIter,”Temp error: “,temperror

#print numpy.shape(MLP.Theta[MLP.Nl-2])

#print numpy.shape(MLP.Ztemp[0])

#print numpy.shape(MLP.weightMatrix[0])

theta_pool=MLP.Theta[MLP.Nl-2]*MLP.weightMatrix[0].transpose()

#print numpy.shape(theta_pool)

#print “theta_pool”,theta_pool

temp=numpy.zeros((1,1,out_Di))

temp[0,:,:]=theta_pool

back_theta_pool=temp.reshape(pool_shape)

#print “back_theta_pool”,numpy.shape(back_theta_pool)

#print “back_theta_pool”,back_theta_pool

error_conv=backErrorfromPoolToConv(back_theta_pool,max_index_Matrix,conv_out_map,2)

#print “error_conv”,numpy.shape(error_conv)

#print error_conv

conv_DetaW,conv_DetaB=backErrorfromConvToInput(error_conv,MNISTimage[ImageNum,0,:,:])

#print “W_k”,W_k

#print “conv_DetaW”,conv_DetaW

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/232345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-11 12:51
下一篇 2024-12-11 12:51

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论