Я пытаюсь реализовать нейронную сеть в python для правильной классификации цифр. ниже мой код. стоимость начиналась с 16000, затем снизилась до 1600, а затем уже не может быть go ниже.
никаких намеков на то, как я могу улучшить свою нейронную сеть.
я без предвзятости, и моя скорость обучения составляет 0,01.
from sklearn.datasets import load_digits
digits=load_digits()
X=digits.data
y=digits.target
#dgt_otpt is a 10x10 identity matrix
#dgt_otpt[0] output for the value 0
#dgt_otpt[1] output for the value 1
#dgt_otpt[2] output for the value 2
#..
#..
#..
#dgt_otpt[9] output for the value 9
dgt_otpt=np.eye(10)
#2 layer network
sizes=[len(X[0]),25,10]
#weights
weights=[np.random.rand(y,x) for x,y in zip(sizes[:-1],sizes[1:])]
#sigmoid function
def sg_fnc(z):
return 1.0/(1.0+np.exp(-z))
#sigmoid derivative function
def sg_fnc_drvtv(z):
return sg_fnc(z)*(1-sg_fnc(z))
n=0
while n<10000:
#calculating the cost of the network
cst=0
for i in zip (X,y):
z1=np.dot(weights[0],i[0].reshape(64,1))
hddn_lyr=sg_fnc(z1)
z2=np.dot(weights[1],hddn_lyr)
otpt_lyr=sg_fnc(z2)
m=dgt_otpt[i[1]]
m=m.reshape(10,1)
cst+=np.sum((otpt_lyr-m)**2)
print("interation:",n)
print("cost:",cst)
for i in zip (X,y):
#feed forward
z1=np.dot(weights[0],i[0].reshape(64,1))
hddn_lyr=sg_fnc(z1)
z2=np.dot(weights[1],hddn_lyr)
otpt_lyr=sg_fnc(z2)
m=dgt_otpt[i[1]]
m=m.reshape(10,1)
#backpropogation
grd_dscnt_1=np.dot(2*(otpt_lyr-m)*sg_fnc_drvtv(z2),hddn_lyr.T)
grd_dscnt_2=np.dot((np.dot(weights[1].T,2*(otpt_lyr-m)*sg_fnc_drvtv(z2))*sg_fnc_drvtv(z1)),i[0].reshape(1,64))
weights[1]-=0.01*grd_dscnt_1
weights[0]-=0.01*grd_dscnt_2
n+=1