神经网络与深度学习编程练习(coursera 吴恩达 )(3)
2017-11-01 11:11
761 查看
完整实现多层神经网络识别图片中的猫
原coursera课程主页,在网易云课堂中也有课程资源不过没有编程练习。
本次编程利用上次作业中完成的各个函数,完整实现一个多层神经网络,进过训练来识别图片中是否有猫。
代码及训练测试数据下载
代码中没注释,不过coursera里的解释很详细。
dnn_app_utils_v2及测试训练数据在下载链接里。
运行结果:
随着训练次数增加,cost损失函数下降
测试集中识别错误的图片:
可以测试自己拍的图片:
测试结果:
原coursera课程主页,在网易云课堂中也有课程资源不过没有编程练习。
本次编程利用上次作业中完成的各个函数,完整实现一个多层神经网络,进过训练来识别图片中是否有猫。
代码及训练测试数据下载
代码中没注释,不过coursera里的解释很详细。
import time import numpy as np import h5py import matplotlib.pyplot as plt import scipy from PIL import Image from scipy import ndimage from dnn_app_utils_v2 import * plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray' np.random.seed(1) train_x_orig,train_y,test_x_orig,test_y,classes=load_dataset() ''' index=11 plt.imshow(train_x_orig[index]) print('y='+str(train_y[0,index])+",It's a "+classes[train_y[0,index]].decode('utf-8')+' picture.') plt.show() ''' m_train=train_x_orig.shape[0] num_px=train_x_orig.shape[1] m_test=test_x_orig.shape[0] print ("Number of training examples: " + str(m_train)) print ("Number of testing examples: " + str(m_test)) print ("Each image is of size: (" + str(num_px) + ", " + str(num_px) + ", 3)") print ("train_x_orig shape: " + str(train_x_orig.shape)) print ("train_y shape: " + str(train_y.shape)) print ("test_x_orig shape: " + str(test_x_orig.shape)) print ("test_y shape: " + str(test_y.shape)) train_x_flatten=train_x_orig.reshape(train_x_orig.shape[0],-1).T test_x_flatten=test_x_orig.reshape(test_x_orig.shape[0],-1).T train_x=train_x_flatten/255 test_x=test_x_flatten/255 print('train_x.shape:'+str(train_x.shape)) print('test_x.shape:'+str(test_x.shape)) n_x=train_x.shape[0] n_h=7 n_y=1 layers_dims=(n_x,n_h,n_y) def two_layer_model(X,Y,layers_dims,learning_rate=0.0075,num_iterations=3000,print_cost=False): np.random.seed(1) grads={} costs=[] m=X.shape[1] (n_x,n_h,n_y)=layers_dims parameters=initialize_parameters(n_x,n_h,n_y) W1=parameters['W1'] b1=parameters['b1'] W2=parameters['W2'] b2=parameters['b2'] ab8d for i in range(0,num_iterations): A1,cache1=linear_activation_forward(X,W1,b1,'relu') A2,cache2=linear_activation_forward(A1,W2,b2,'sigmoid') cost=compute_cost(A2,Y) dA2=-(np.divide(Y,A2)-np.divide(1-Y,1-A2)) dA1,dW2,db2=linear_activation_backward(dA2,cache2,'sigmoid') dA0,dW1,db1=linear_activation_backward(dA1,cache1,'relu') grads['dW1']=dW1 grads['db1']=db1 grads['dW2']=dW2 grads['db2']=db2 parameters=update_parameters(parameters,grads,learning_rate) W1=parameters["W1"] b1=parameters['b1'] W2=parameters['W2'] b2=parameters['b2'] if print_cost and i%100==0: print("Cost after iteration {}:{}".format(i,np.squeeze(cost))) if print_cost and i%100==0: costs.append(cost) plt.plot(np.squeeze(costs)) plt.ylabel('cost') plt.xlabel('iterations(per tens)') plt.title('Learning rate = '+str(learning_rate)) plt.show() return parameters layers_dims=[12288,20,7,5,1] def L_layer_model(X,Y,layers_dims,learning_rate=0.0075,num_iterations=3000,print_cost=False): np.random.seed(1) costs=[] parameters=initialize_parameters_deep(layers_dims) for i in range(0,num_iterations): AL,caches=L_model_forward(X,parameters) cost=compute_cost(AL,Y) grads=L_model_backward(AL,Y,caches) parameters=update_parameters(parameters,grads,learning_rate) if print_cost and i%100==0: print("Cost after iteration %i:%f"%(i,cost)) if print_cost and i%100==0: costs.append(cost) plt.plot(np.squeeze(costs)) plt.ylabel('cost') plt.xlabel('iterations (per tens)') plt.title('Learning rate = '+str(learning_rate)) plt.show() return parameters parameters = L_layer_model(train_x, train_y, layers_dims, num_iterations = 2500, print_cost = True) pred_train=predict(train_x,train_y,parameters) pred_test=predict(test_x,test_y,parameters) print_mislabeled_images(classes, test_x, test_y, pred_test) my_image = "my_image.jpg" # change this to the name of your image file my_label_y = [1] # the true class of your image (1 -> cat, 0 -> non-cat) ## END CODE HERE ## fname = "images/" + my_image image = np.array(ndimage.imread(fname, flatten=False)) my_image = scipy.misc.imresize(image, size=(num_px,num_px)).reshape((num_px*num_px*3,1)) my_predicted_image = predict(my_image, my_label_y, parameters) plt.imshow(image) print ("y = " + str(np.squeeze(my_predicted_image)) + ", your L-layer model predicts a \"" + classes[int(np.squeeze(my_predicted_image)),].decode("utf-8") + "\" picture.") plt.show()
dnn_app_utils_v2及测试训练数据在下载链接里。
运行结果:
随着训练次数增加,cost损失函数下降
测试集中识别错误的图片:
可以测试自己拍的图片:
测试结果:
相关文章推荐
- 神经网络与深度学习编程练习(coursera 吴恩达 )(2)
- Coursera deep learning 吴恩达 神经网络和深度学习 第四周 编程作业 Building your Deep Neural Network
- Coursera deep learning 吴恩达 神经网络和深度学习 第三周 编程作业 Planar data classification with one hidden layer
- Coursera deep learning 吴恩达 神经网络和深度学习 第二周 编程作业 Logistic Regression with a Neural Network mindset
- Coursera 深度学习 deep learning.ai 吴恩达 神经网络和深度学习 第一课 第二周 编程作业 Python Basics with Numpy
- 吴恩达Coursera深度学习(4-1)编程练习
- 吴恩达Coursera深度学习(4-2)编程练习
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第二周课后习题 Python Basics with numpy (optional)
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-2)-- 神经网络基础
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第一周课后习题 Neural Network Basics
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(5-1)-- 循环神经网络
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第二周课后习题 Logistic Regression with a Neural Network mindset
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第三周课后习题 Shallow Neural Networks Quiz, 10 questions
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第三周课后习题 Planar data classification with a hidden layer
- 吴恩达Coursera深度学习(4-4)编程练习
- 深度学习与神经网络-吴恩达(Part1Week3)-单隐层神经网络编程实现(python)
- coursera 吴恩达 -- 第一课 神经网络和深度学习 :第四周课后习题 Building your Deep Neural Network - Step by Step v5
- 【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第二周作业
- 【中文】【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第三周作业
- 吴恩达Coursera深度学习(4-1)卷积神经网络基础