import numpy as np
import matplotlib.pyplot as plt
import h5py
import sklearn
import sklearn.datasets
from mpl_toolkits.mplot3d import Axes3D
1、画3D图形
def draw3D(X, Y, Z, angle=(45,-30)):
fig = plt.figure(figsize=(15,7))
ax = Axes3D(fig)
ax.view_init(angle[0], angle[1])
ax.plot_surface(X,Y,Z,rstride=1, cstride=1, cmap=’rainbow’)
plt.show()
2、用sigmod来进行非线性变换
def sigmoid(x):
s = 1/(1+np.exp(-x))
return s
3、构造前向传播函数
def forward_propagation(X, parameters):
W1 = parameters[“W1”]
b1 = parameters[“b1”]
z1 = np.dot(W1, X) + b1
a1 = sigmoid(z1)
return a1
4、初始化w,x,b的数据
def initialize_parameters_zeros(layers_dims):
parameters = {}
L = len(layers_dims) # number of layers in the network
for l in range(1, L):
### START CODE HERE ### (≈ 2 lines of code)
parameters['W' + str(l)] = np.ones((layers_dims[l], layers_dims[l - 1]))
parameters['b' + str(l)] = np.zeros((layers_dims[l], 1))
### END CODE HERE ###
return parameters
5、构造一个2个输入一个输出的神经网络
parameters = initialize_parameters_zeros([2, 1])
print(“W1 = ” + str(parameters[“W1”]))
print(“b1 = ” + str(parameters[“b1”]))
6、自己制造测试数据和训练数据
x = np.linspace(-10, 10, 100)#x的值为1*100,每个数据差0.2,例如:-10,-9.7979798….10
y = np.linspace(-10, 10, 100)#y的值为1*100,每个数据差0.2,例如:-10,-9.7979798….10
X, Y = np.meshgrid(x, y)#把X扩展为100*100的矩阵
7、把X,Y展开
X_f = X.flatten()#把X压缩为1*10000的向量,按行展开
[-10,-9.75,-9.55,….0.1010,….9.55,9.75,10,-10,-9.75,-9.55,……0.1010,0.3030…….9.55,9.75,10…..10]
Y_f = Y.flatten()#把Y压缩为1*10000的向量,按行展开
[-10,-10,-10,….-9.75,-9.75,-9.75…,-9.55,-9.55,-9.55…….0.1010,0.1010,……..9.75,9.75,9.75….10,10,10]
#8、数据生成序列队
data = zip(X_f, Y_f)#data是一个序列对
print(“data:”,list(data))#输入合并后的X_f,Y_f的值
9、预测结果
prectResult=[]
for d in data:
#print(“d:”,d)
prect=forward_propagation(d,parameters)#用前向传播预测值
prectResult.append(prect)#把数据加入列表中
10、扩展数据,并生成3D图形
T1=np.array(prectResult).reshape(100,100)#把列表转化为array,并转化为100*100矩阵
draw3D(X,Y,T1)