资源简介
本代码利用numpy实现了深度前馈网络;代码包括了网络深度,每层的单元数和每层的激活函数可以自选,BP算法;最后跟了一个多项式拟合的例子。该代码适合深度学习初学者。
代码片段和文件信息
# =============================================================================
# 深度前馈网络框架
# 多项式(正弦)拟合任务,需要numpy包和matplotlib包;
# Written By Wang Chunlei
# =============================================================================
#------------------ 定义深度前馈网络 -------------------------------------
import numpy as np
class MyDfn:
__WtInitVar = 0.01 #初始权值服从标准正态分布,该参数控制方差
__BsInitAmp = 0.01 #初始阈值服从均匀分布,该参数控制取值范围
__miu = 0.02 #随机梯度下降学习率
# 网络初始化函数
def __init__(self InputLen=1 layerNum=0 UnitNum=[] ActiveFcs=[]):
self.layerNum = layerNum #网络层数(int)
self.InputLen = InputLen #网络输入数据长度(int)
self.WeightMts =[] #网络各层权值list内容为numpy矩阵
self.BiasVc = [] #网络各层阈值list内容为numpy矩阵
self.ActiveFcs =[] #网络各层的激活函数list内容为函数指针
self.UnitNum = [] #网络各层的单元数numpy数组
# 如果网络层数等于0
if(self.layerNum == 0):
return
# 每层网络的单元数目
if(UnitNum.size == layerNum):
self.UnitNum = UnitNum
else:
print(“UnitNum长度和layerNum不等“)
return
# 每层网络的激活函数和导数对应的函数指针
if(len(ActiveFcs) != self.layerNum):
print(“ActiveFcs维度有误“)
return
else:
self.ActiveFcs = ActiveFcs
# 初始化网络
self.WeightMts.append( self.__WtInitVar*np.random.randn(UnitNum[0] InputLen) )
self.BiasVc.append( self.__BsInitAmp*np.random.rand(UnitNum[0]1) )
for idi in range(1 self.layerNum):
self.WeightMts.append(self.__WtInitVar*np.random.randn(UnitNum[idi] UnitNum[idi-1]))
self.BiasVc.append(self.__BsInitAmp*np.random.rand(UnitNum[idi]1))
# 显示网络结构函数
def PrintNetworkInfo(self):
print(“网络层数=%d“ % self.layerNum)
if(self.layerNum >= 1):
print(“第1层:输入数据长度=%d,该层单元数=%d“ % (self.InputLen self.UnitNum[0]))
for idi in range(1 self.layerNum):
print(“第%d层:输入数据长度=%d,该层单元数=%d“ % (idi+1 self.UnitNum[idi-1] self.UnitNum[idi]))
# 前馈函数(Input为numpy列向量)
def Forward(self Input):
if(Input.shape != (self.InputLen 1)):
print(“输入数据维度和网络不符“)
return 0.0
# self.LyVals是一个长度为(self.layerNum+1)的列表
# 第一个元素是网络输入值,后面依次是各层输出值
# self.LyDris是一个长度为self.layerNum的列表,每个元素都是对应层输出的导数
self.LyVals = [Input]
self.LyDris = []
for idi in range(self.layerNum):
ZVal = np.dot(self.WeightMts[idi] self.LyVals[idi]) + self.BiasVc[idi]
ValTmp DriTmp = self.ActiveFcs[
相关资源
- Python-BDD100K大规模多样化驾驶视频数据
- Instant Pygame for Python Game Development How
- Biopython Tutorial
- Think Python 2nd
- 一个小小的表白程序(python)
- Python课堂笔记(高淇400集第一季)
- 二级考试python试题12套(包括选择题和
- pywin32_python3.6_64位
- python+ selenium教程
- PycURL(Windows7/Win32)Python2.7安装包 P
- 英文原版-Scientific Computing with Python
- 7.图像风格迁移 基于深度学习 pyt
- 基于Python的学生管理系统
- A Byte of Python(简明Python教程)(第
- Python实例174946
- Python 人脸识别
- Python 人事管理系统
- 基于python-flask的个人博客系统
- 计算机视觉应用开发流程
- python 调用sftp断点续传文件
- python socket游戏
- 基于Python爬虫爬取天气预报信息
- python函数编程和讲解
- Python开发的个人博客
- 基于python的三层神经网络模型搭建
- python实现自动操作windows应用
- python人脸识别(opencv)
- python 绘图(方形、线条、圆形)
- python疫情卡UN管控
- python 连连看小游戏源码
评论
共有 条评论