91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

本資源為純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

評論

共有 條評論