吴恩达作业2 利用两层神经网络实现不同颜色点的分类,可更改隐藏层数量

任务:将400个两种颜色的点用背景色分为两类。

前面的还是建议重点学神经网络知识,至于数据集怎么做的后面在深究,首先先看看数据集,代码如下:

 

def load_planar_dataset():np.random.seed(1)m = 400 # number of examplesN = int(m/2) # number of points per classD = 2 # dimensionalityX = np.zeros((m,D)) # data matrix where each row is a single exampleY = np.zeros((m,1), dtype='uint8') # labels vector (0 for red, 1 for blue)a = 4 # maximum ray of the flowerfor j in range(2):ix = range(N*j,N*(j+1))t = np.linspace(j*3.12,(j+1)*3.12,N) + np.random.randn(N)*0.2 # thetar = a*np.sin(4*t) + np.random.randn(N)*0.2 # radiusX[ix] = np.c_[r*np.sin(t), r*np.cos(t)]Y[ix] = jX = X.TY = Y.Treturn X, Y

打印看看返回的X,Y

由于X太多不方便粘贴,只打印了shape,可看出X是2行400列的矩阵(2,400),Y是1行400列矩阵(1,400)。

然后用X的数据作为二维的坐标点,Y的0,1作为分类点,比如0代表红色点,1代表蓝色点,这样400个两种颜色的点就可以显示出来,代码如下:

 

"""
测试函数:实现数据集的显示
"""
def test():X,Y=planar_utils.load_planar_dataset()plt.scatter(X[0,:],X[1,:],c=np.squeeze(Y),s = 80,cmap=plt.cm.Spectral)plt.show()

显示结果如下:

利用两层神经网络,一层隐藏层,一层输出层,400个点,所以有400个样本,两种特征(两种颜色),所以输入层节点是2个,隐藏层定义4个节点,输出层1个节点,脑海里就有神经网络的结构图了,故W1(4,2),b1(4,1),W2(1,4),b2(1,1)简单的演示一遍。Z1=W1*X=(4,400),Z2=W2*Z1=(1,400),就对应Y的维度了。中间加激活函数和b值不影响维度

具体公式推导如下,右上角是神经网络:

下面看代码:

 

def sigmoid(z):s=1.0/(1+np.exp(-z))return s
"""
返回输入层节点和输出层节点
"""
def lay_sizer(X,Y):n_x = X.shape[0]n_y = Y.shape[0]return n_x,n_y
"""
初始化W和b,n_h就是隐藏层节点
"""
def initialize_parameters(n_x,n_h,n_y):W1 = np.random.randn(n_h,n_x)*0.01b1=np.zeros((n_h,1))W2 = np.random.randn(n_y, n_h) * 0.01b2 = np.zeros((n_y, 1))parameters={'W1':W1,'b1':b1,'W2':W2,'b2':b2}return parameters
"""
前向传播,返回中间量Z1 A1 Z2 A2 最后一层加sigmoid因为要实现二分类
"""
def forward_propagation(X,parameters):W1 = parameters['W1']W2 = parameters['W2']b1 = parameters['b1']b2 = parameters['b2']Z1 = np.dot(W1, X) + b1A1 = np.tanh(Z1)#Relu(Z1)Z2 = np.dot(W2, A1) + b2A2 = sigmoid(Z2)cache={'Z1':Z1,'Z2':Z2,'A1':A1,'A2':A2}return cache,A2
"""
利用交叉熵函数计算损失值
"""
def compute_cost(A2,Y):m=Y.shape[1]cost=-1 / m *(np.dot(Y,np.log(A2).T)+np.dot((1-Y),np.log(1-A2).T))cost=np.squeeze(cost)return cost
"""
后向传播:注意维度
"""
def back_propagation(parameters,cache,X,Y):m = Y.shape[1]A2 = cache['A2']A1 = cache['A1']W2 = parameters['W2']dZ2 = A2-YdW2 = 1/m*(np.dot(dZ2,A1.T))db2 = 1/m*(np.sum(dZ2,axis=1,keepdims=True)) #db2(n_y,1) 按行相加 保持二维性# [[1,2],[3,4]] [[3],[7]]dA1 = np.dot(W2.T,dZ2)dZ1 = dA1*(1-np.power(A1,2))dW1 = 1/m*np.dot(dZ1,X.T)db1 = 1/m*(np.sum(dZ1,axis=1,keepdims=True))  #db1(n_h,1) 按行相加 保持二维性grads={'dW2':dW2,'dW1':dW1,'db2':db2,'db1':db1}return grads
"""
更新参数 W和b
"""
def update_parameters(grads,parameters,learning_rate):dW2=grads['dW2']dW1=grads['dW1']db2=grads['db2']db1=grads['db1']W2=parameters['W2']W1= parameters['W1']b2 = parameters['b2']b1 = parameters['b1']W2 = W2 - learning_rate*dW2W1 = W1 - learning_rate * dW1b2 = b2 - learning_rate * db2b1 = b1 - learning_rate * db1parameters = {'W1': W1,'b1': b1,'W2': W2,'b2': b2}return parameters
"""
构建模型
"""
def nn_model(X,Y,num_iterations,learning_rate,print_cost,n_h):n_x,n_y = lay_sizer(X, Y)parameters = initialize_parameters(n_x, n_h, n_y)#costs=[]for i in range(num_iterations):cache, A2 = forward_propagation(X, parameters)cost = compute_cost(A2, Y)#costs.append(cost)grads = back_propagation(parameters, cache, X,Y)parameters = update_parameters(grads, parameters, learning_rate)if print_cost and i%100==0:print('Cost after iterations {}:{}'.format(i,cost))return parameters  #,costs
"""
用更新好的参数预测Y值
"""
def prediction(X,parameters):cache,A2=forward_propagation(X,parameters)predictions=np.around(A2)return predictions
def train_accuracy():X, Y = planar_utils.load_planar_dataset()parameters = nn_model(X, Y, num_iterations=10000, learning_rate=1.2, print_cost=True,n_h=8)# print('parameters W1', parameters['W1'])# print('parameters W2', parameters['W2'])# print('parameters b1', parameters['b1'])# print('parameters b2', parameters['b2'])predictions = prediction(X, parameters)print(predictions)planar_utils.plot_decision_boundary(lambda x: prediction(x.T, parameters), X, np.squeeze(Y))plt.show()###########二分类精度求解result = np.dot(np.squeeze(Y), np.squeeze(predictions.T)) + np.dot(np.squeeze(1 - Y), np.squeeze(1 - predictions.T))print('The accuracy is {}%'.format((result) / Y.size * 100))if __name__=='__main__':#test()train_accuracy()

结果:

更改隐藏层个数:

 

def Different_Hidden_Size():X, Y = planar_utils.load_planar_dataset()hidden_layer_sizes=[1,2,3,4,5,10,20]plt.figure(figsize=(16,16))for i,n_h in enumerate(hidden_layer_sizes):print('n_h=',n_h)plt.subplot(3,3,i+1)plt.title('hidden_layer_sizes{}'.format(n_h))parameters = nn_model(X, Y, num_iterations=2000, learning_rate=1.2, print_cost=False,n_h=n_h)planar_utils.plot_decision_boundary(lambda x: prediction(x.T, parameters), X, np.squeeze(Y))predictions = prediction(X, parameters)###########二分类精度求解result = np.dot(np.squeeze(Y), np.squeeze(predictions.T)) + np.dot(np.squeeze(1 - Y),np.squeeze(1 - predictions.T))print('The accuracy hidden_layer_sizes{} is {}%'.format(n_h,(result) / Y.size * 100))plt.savefig('1.png')plt.show()
if __name__=='__main__':#test()#train_accuracy()Different_Hidden_Size()

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用tensorflow构建AlexNet模型,实现小数量级的猫狗分类(只有train)

首先看路径: data文件夹分为,model文件夹,train文件夹和文件夹,model文件夹存放模型文件,train存放cat和dog的两个文件夹图片, validation和train一样。config.py存放配置的一些参数,util.py定…

脑网络的可塑性——随时都在发生

来源:神经科技前沿神经元的突起是神经元胞体的延伸部分,由于形态结构和功能的不同,可分为树突(dendrite)和轴突(axon);树突是从胞体发出的一至多个突起,呈放射状。轴突每个神经元只有一根胞体发出轴突的细胞 质部位多呈…

KAZE论文研读

KAZE是发表在ECCV2012的一种特征点检测算法,相比于SIFT和SURF,KAZE建立的高斯金字塔是非线性的尺度空间,采用加性算子分裂算法(Additive Operator Splitting, AOS)来进行非线性扩散滤波。一个很显著的特点是在模糊图像的同时还能保留边缘细节…

简单的线性模型实现tensorflow权重的生成和调用,并且用类的方式实现参数共享

首先看文件路径,line_regression是总文件夹,model文件夹存放权重文件, global_variable.py写了一句话. save_path./model/weight 权重要存放的路径,以weight命名. lineRegulation_model.py代码 import tensorflow as tf "…

comparing ORB and AKAZE

文章全称是《Comparing ORB and AKAZE for visual odometry of unmanned aerial vehicles》。这是一篇来自巴西的文章,没有在百度文库中找到,是在其他博客中给出的链接得到的。从链接的URL可以看出这是一篇来自会议CCIS云计算与智能系统国际会议的文章。…

利用 CRISPR 基因编辑技术,人类正在做七件“疯狂”的事

来源:36Kr编译:喜汤很少有哪种现代科学创新能像CRISPR基因编辑技术一样影响深远。有了它,科学家们可以精确地改变任何细胞的DNA。CRISPR技术成为新宠,部分原因是它比早期基因编辑技术更容易使用。尽管CRISPR还没有彻底大展身手&am…

吴恩达作业3:利用深层神经网络实现小猫的分类

利用4层神经网络实现小猫的分类,小猫训练样本是(209,64*64*312288),故输入节点是12288个,隐藏层节点依次为20,7,5,输出层为1。 首先看文件路径,dnn_utils_v2.py代码是激活…

A-KAZE论文研读

AKAZE是KAZE的加速版本。KAZE在构建非线性空间的过程中很耗时,在AKAZE中将Fast Explicit Diffusion(FED)加入到金字塔框架可以dramatically speed-up。在描述子方面,AKAZE使用了更高效的Modified Local Difference Binary(M-LDB),可以从非线性…

和你抢“饭碗”的40家服务机器人企业大盘点!

来源:物联网智库摘要:本文将对国内近40家服务机器人企业进行汇总介绍,所选企业在其相应版块活跃度较高。从三个大类进行了细分盘点。国家机器人联盟(IFR)根据应用环境将机器人分为了工业机器人和服务机器人。服务机器人…

YOLO9000

YOLO9000是YOLO的第三个版本。前两个版本是YOLO v1,YOLO v2,在CVPR2017的文章《Better,Faster,Stronger》中的前半部分都是对前两个版本的介绍,新的内容主要在Stronger部分。YOLO9000中的9000指的是YOLO可以对超过9000种图像进行分类。 Bett…

吴恩达作业4:权重初始化

权重初始化的 正确选择能够有效的避免多层神经网络传播过程中的梯度消失和梯度爆炸问题,下面通过三个初始化的方法来验证: sigmoid导数函数:最大值小于0.25,故经过多层反向传播以后,会导致最初的层,权重无…

先发制人!Waymo将首推商用载人自动驾驶服务,Uber们怕不怕?

编译:费棋来源:AI科技大本营“真的,真的很难。”11 月举办的一场会议上,Alphabet 旗下 Waymo CEO John Krafcik 对做自动驾驶汽车技术的艰难不无感慨。在他看来,未来几十年内,自动驾驶汽车将一直存在限制&a…

利用ORB/AKAZE特征点进行图像配准

Kp1,kp2都是list类型,两幅图都是500个特征点。这和ORB论文中的数据是一样的。4.4章节 Matches也是list类型,找到325个匹配对。 AKAZE文章中提到一个指标:MS(matching score)# Correct Matches/# Features, 如果overlap area error 小于40%…

吴恩达作业5:正则化和dropout

构建了三层神经网络来验证正则化和dropout对防止过拟合的作用。 首先看数据集,reg_utils.py包含产生数据集函数,前向传播,计算损失值等,代码如下: import numpy as np import matplotlib.pyplot as plt import h5py …

十年之后,数字孪生将这样改变我们的工作与生活

来源:资本实验室数字孪生是近几年兴起的非常前沿的新技术,简单说就是利用物理模型,使用传感器获取数据的仿真过程,在虚拟空间中完成映射,以反映相对应的实体的全生命周期过程。在未来,物理世界中的各种事物…

什么是图像

图像,尤其是数字图像的定义,在冈萨雷斯的书中是一个二维函数f(x,y),x,y是空间平面坐标,幅值f是图像在该点处的灰度或者强度。下面通过OpenCV中最常用的图像表示方法Mat来看一下在计算机中是怎么定义图像的。 Mat的定义 OpenCV在2.0之后改用…

吴恩达作业6:梯度检验

梯度检验的目的就是看反向传播过程中的导数有没有较大的误差,首先看Jtheta*x的梯度检验:代码如下 import numpy as np """ Jx*theta的前向传播 """ def forward_propagation(x,theta):Jx*thetareturn J ""&quo…

10年后的计算机会是怎样的?

作者:孙鹏(剑桥大学计算机系博士)来源:新原理研究所上个世纪三十年代,邱奇和图灵共同提出了通用计算机的概念[1]。在接下来的十多年里,因为战争需要下的国家推动,计算机得以很快从理论发展成为实…

什么是图像变换

还是看OpenCV官方手册,我觉得这样可以同时学习如何使用函数和如何理解一些基本概念。 首先,这里的几何变换geometrical transformations是针对2D图像而言的,不改变图像内容而是将像素网格变形deform the pixel grid,映射到目标图…

MSRA20周年研究趋势文章|图像识别的未来:机遇与挑战并存

文/微软亚洲研究院 代季峰 林思德 郭百宁识别图像对人类来说是件极容易的事情,但是对机器而言,这也经历了漫长岁月。在计算机视觉领域,图像识别这几年的发展突飞猛进。例如,在 PASCAL VOC 物体检测基准测试中,检测器的…