资源简介
本资源为纯python实现mnist手写体识别的代码,为作者本人所写,供深度学习初学者共同交流探讨,欢迎二次创作,网络为三层,可达到97%上准确率,模型可以选择多种训练方式,学习率,激活函数,损失函数等我都写了相关函数,可以选择,模型也可以自由变换,只需要改一下前面常量参数值就行。升级版本正在打包测试过程中,完成后可以自行选择batch—size大小等,具体介绍可以看我置顶博文介绍

代码片段和文件信息
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import h5py
#plt.rcParams[“font.family“]=“SimHei“
#加载keras内部mnist数据集
mnist=tf.keras.datasets.mnist
(train_xtrain_y)(test_xtest_y)=mnist.load_data()
train_xtest_x=train_x/255test_x/255
#网络模型结构参数
width_input=784 #输入层神经网络节点数=28*28
width_net1=100 #第一层神经网络节点数
width_net2=100 #第二层神经网络节点数
width_net3=10 #输出层神经网络节点数
#模型训练参数
epoch=50
way_dec_lr=1 #input:1 or 2
“““
学习率更新方式,选1,表示每lr_dec_epoch轮固定按lr_dec_rate比例减少学习率
选择2,表示记录5次学习率大小,当当前轮次loss值大于前nub次(包括本次)loss平均值
时,学习率自动降为当前学习率0.1倍,当学习率降为last_lr时,训练终止,保存模型
“““
nub=3 #设置记录nub次loss值
last_lr=0.0001 #方式2时,最终截止学习率值
learn_rate=0.01 #默认学习率
init_learn_rate=0.01 #初始学习率
lr_dec_epoch=10 #设置每10轮更新一次学习率
lr_dec_rate=0.5 #跟新学习率倍数
savepath=‘data/weight4.h5‘ #保存模型地址
loadmodel=‘data/weight3.h5‘ #当为迁移学习时,载入模型地址(请确保本次训练模型结构与加载的模型一致)
isretrain=False #是否为迁移学习True or False
#隐含层的激活函数
def sigmoid(x):
return 1/(1+np.exp(-x))
#输出层的激活函数
def softmax(y):
c=np.max(y)
y=y-c
sum=np.sum(np.exp(y))
return np.exp(y)/sum
#定义均方误差损失函数定义
def loss(y_prey_grtru):
return np.sum(np.square(y_pre-y_grtru))
#定义交叉熵损失函数
def cross_entropy_loss(y_prey_grtru):
return -np.sum(y_grtru*np.log(y_pre)+(1-y_grtru)*np.log(1-y_pre))
#定义网络输入层
x=np.zeros((width_input))
#定义网络第一层
a1=np.zeros((width_net1))
#定义网络隐藏层
a2=np.zeros((width_net2))
#定义网络输出层
y=np.zeros((width_net3))
#模型权重导入
def get_model(weight_path):
h5f=h5py.File(weight_path‘r‘)
w1=h5f[‘w1‘][:]
b1=h5f[‘b1‘][:]
w2=h5f[‘w2‘][:]
b2=h5f[‘b2‘][:]
w3=h5f[‘w3‘][:]
b3=h5f[‘b3‘][:]
return w1w2w3b1b2b3
#初始化模型
def genarate_model():
w1=np.random.normal(02/width_input(width_inputwidth_net1))
b1=np.random.normal(02/width_net1(width_net1))
w2=np.random.normal(02/width_net1(width_net1width_net2))
b2=np.random.normal(02/width_net2(width_net2))
w3=np.random.normal(02/width_net2(width_net2width_net3))
b3=np.random.normal(02/width_net3(width_net3))
return w1w2w3b1b2b3
#初始化nub个临时保存模型的参数以便在早停前选取最优模型
w11=np.zeros((nubwidth_inputwidth_net1))
b11=np.zeros((nubwidth_net1))
w21=np.zeros((nubwidth_net1width_net2))
b21=np.zeros((nubwidth_net2))
w31=np.zeros((nubwidth_net2width_net3))
b31=np.zeros((nubwidth_net3))
#模型参数生成
if isretrain:
w1w2w3b1b2b3=get_model(loadmodel)
else:
w1w2w3b1b2b3=genarate_model()
#初始化参数z(其中a=sigmoid(z))
z1=np.dot(xw1)+b1
z2=np.dot(a1w2)+b2
z3=np.dot(a2w3)+b3
#定义前向传播
def feedforward(awb):
return sigmoid(np.dot(aw)+b)
#保存模型
def save_model(savepathw_1w_2w_3b_1b_2b_3):
filename=savepath
h5f=h5py.File(filename‘w‘)
h5f.create_dataset(‘w1‘data=w_1)
h5f.create_dataset(‘w2‘data=w_2)
h5f.create_dataset(‘w3‘data=w_3)
h5f.cre
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7151 2020-04-02 19:53 minist-network.py
文件 1821 2020-04-02 22:14 minist_pre.py
相关资源
- 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 连连看小游戏源码
评论
共有 条评论