资源简介
本代码利用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[
相关资源
- 某网Python3.6+电商实战+Vue+Django
- Python深度学习部分
- pyqt5做一个一个时钟demo(python3)
- win32 API 中文版,适用于所有的python版
- fpgrowth的python实现
- 图像识别/自动完成拼图验证码的dem
- 自己用python写的后门
- 度分秒与十进制批量转换
- Learn Python the Hard Way 中文版第三版
- HTMLTestRunnerCN.py
- HAP-NodeJS虚拟设备配置及python脚本
- python3下的PBC库
- Python成绩管理系统精简版
- 最全Python编程基础+简单爬虫+进阶项目
- python端口扫描代码源码
- python wxpy实现微信群消息转发
- Python_验证采样定理.py
- python爬虫爬微信公众号文章
- Python网络爬虫实战Scrapy.txt
- micropython下的ds18b20代码
- knn 字符识别 python
- EM算法Python实现
- 简单的python购物车程序
- 是AI就躲个飞机-纯Python实现人工智能
- Python接口测试框架实战与自动化进阶
- 基本蚁群算法python实现
- python核心编程第二版习题答案
- 基于二维伽马函数的光照不均匀的图
- python主题爬取百度新闻
- MySQL-python-1.2.5.win-amd64-py2.7
评论
共有 条评论