本文是我心情不好,随便写的,也懒的说那么多,直接上代码
#导入使用的库,这个数据什么的来自于吴恩达老师的课后习题
import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_dataset
#导入数据
train_x, train_y, test_x, test_y, classes=load_dataset()
#sigmoid函数,没什么说的
def sigmoid(z):
return 1/(1+np.exp(-z))
#这个是对数据的初始化,后面会提一提
def init(dim):
train_x_flatten=train_x.reshape(train_x.shape[0],-1).T
test_x_flatten=test_x.reshape(test_x.shape[0],-1).T
w=np.zeros((dim,1))
b=0
assert(w.shape==(dim,1))
return (w,b)
#这篇内容的核心,深度学习的前后传播
def propagate(w,b,x,y,m,a):
global all_data
J=0
z=np.dot(w.T,x)+b
A=sigmoid(z)
all_data['cost_L'].append(-(y*np.log(A)+(1-y)*np.log(1-A)))
dz=A-y
dw=(1/m)*np.dot(x,dz.T)
db=(1/m)*np.sum(dz)
w=w-a*dw
b=b-a*db
return (w,b)
#预测函数,没什么技术含量
def predict(train_x_flatten,train_y,test_x_flatten,test_y,w,b,n):
print('当前学习率:',learing)
print('当迭代次数为:',itera)
global all_data
Y_prediction = np.zeros((1,train_y.shape[1]))
A=sigmoid(np.dot(w.T,train_x_flatten))
A=A.reshape(1,-1)
Sum=0
for i in range(train_y.shape[1]):
Y_prediction[0,i] = 1 if A[0,i] > 0.5 else 0
Sum+=int(Y_prediction[0,i]==train_y[0,i])
all_data['train_pre'].append(Sum/train_y.shape[1])
print('训练模型准确率:',Sum/train_y.shape[1])
A1=sigmoid(np.dot(w.T,test_x_flatten))
A1=A1.reshape(1,-1)
Y_prediction1 = np.zeros((1,test_y.shape[1]))
Sum1=0
for i in range(test_y.shape[1]):
Y_prediction1[0,i] = 1 if A1[0,i] > 0.5 else 0
Sum1+=int(Y_prediction1[0,i]==train_y[0,i])
print('训练模型准确率:',Sum1/test_y.shape[1])
all_data['test_pre'].append(Sum1/test_y.shape[1])
#全部内容整合到一起,做得和那些模块类似
def model(train_x, train_y, test_x, test_y,n=10,a=0.01):
train_x_flatten=train_x.reshape(train_x.shape[0],-1).T
test_x_flatten=test_x.reshape(test_x.shape[0],-1).T
dim=train_x_flatten.shape[0]
w,b=init(dim)
for i in range(n):
w,b=propagate(w,b,train_x_flatten,train_y,dim,a)
predict(train_x_flatten,train_y,test_x_flatten,test_y,w,b,n)
learning_rate=[0.1,0.01,0.001,0.0001]
iterable=[50,100,150,200,250,300]
all_data={'test_pre':[],'train_pre':[],'cost_L':[],'learning_rate':[],'iterable':[]}
for learing in learning_rate:
for itera in iterable:
all_data['learning_rate'].append(learing)
all_data['iterable'].append(itera)
model(train_x, train_y, test_x, test_y,itera,learing)
首先,我这代码运行没问题,但是只能作为参考,因为我菜。
sigmoid函数,按照公式来,没什么说的。。。
嗯,好像都是按照公式来,全都没得说的必要,就这样吧。