完整实现多层神经网络识别图片中的猫
原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/255print('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_dimsparameters=initialize_parameters(n_x,n_h,n_y)W1=parameters['W1']b1=parameters['b1']W2=parameters['W2']b2=parameters['b2']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']=dW1grads['db1']=db1grads['dW2']=dW2grads['db2']=db2parameters=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 parameterslayers_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 parametersparameters = 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 吴恩达 )(3)相关推荐

  1. 深度学习(二)吴恩达给你的人工智能第一课: 02.改善深层神经网络:超参数调试、正则化以及优化

    目录 第一周 深度学习的实用层面 1.1 训练 / 开发 / 测试集 1.1.1. 训练集.验证集.测试集 ​         1.2 偏差 / 方差 1.3 机器学习基础 1.3.1.降低偏差/降低 ...

  2. 这份深度学习课程笔记获吴恩达点赞

    来源:机器之心 本文共7470字,建议阅读8分钟. 通过本文用优美的信息图为大家解读深度学习课程的知识与亮点~ 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这 ...

  3. 深度学习系列作业1----by 吴恩达

    import numpy as np import matplotlib.pyplot as plt import h5py  # 是与数据集(存储在H5文件中的数据集)交互的常用软件包 import ...

  4. Coursera吴恩达《深度学习》课程总结(全)

    这里有Coursera吴恩达<深度学习>课程的完整学习笔记,一共5门课:<神经网络和深度学习>.<改善深层神经网络>.<结构化机器学习项目>.<卷 ...

  5. 5-1 Coursera吴恩达《序列模型》 第一周课程笔记-循环序列网络(RNN)

    记录吴恩达Andrew Ng深度学习专项课程笔记,方便之后回顾,共5门课.第一门课<神经网络与深度学习>(Neural Networks and Deep Learning)的4周课程笔记 ...

  6. Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面

    红色石头的个人网站:redstonewill.com Andrew Ng的深度学习专项课程的第一门课<Neural Networks and Deep Learning>的5份笔记我已经整 ...

  7. 2-3 Coursera吴恩达《改善深度神经网络》第三周课程笔记-超参数调试、Batch正则化和编程框架

    上节课2-2 Coursera吴恩达<改善深度神经网络>第二周课程笔记-优化算法我们主要介绍了深度神经网络的优化算法.包括对原始数据集进行分割,使用mini-batch 梯度下降(mini ...

  8. Coursera吴恩达《优化深度神经网络》课程笔记(3)-- 超参数调试、Batch正则化和编程框架

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了深度神经网络的优化算法.包括对原始数据集进行分割,使用mini-batch gradient descent.然后介绍了指数加 ...

  9. Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究

    红色石头的个人网站:redstonewill.com <Convolutional Neural Networks>是Andrw Ng深度学习专项课程中的第四门课.这门课主要介绍卷积神经网 ...

最新文章

  1. Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh
  2. 08年度世界最佳照片(三)
  3. JLOI2015 战争调度
  4. JAVA集合泛型,类型擦除,类型通配符上限之类的知识点
  5. html dom获得父div,获取元素的父div
  6. ElementUI的el-cascader级联选择器各个属性的设置
  7. 邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单
  8. 初始化懒惰关系以及何时使用它们的5种方法
  9. 《RabbitMQ 实战指南》第一章 RabbitMQ 简介
  10. c语言基础编程题山东科技大学,C语言练习题〔山东科技大学吐血整理〕.doc
  11. 利用Gabor变换法分析纹理图像 matlab代码实现
  12. PMSM FOC控制 Matlab/Simulink仿真之反Clark变换
  13. everest任务栏设置
  14. 试用期不合格通知单可以签吗?
  15. 【第一课】UAV倾斜摄影测量技术
  16. 焊接好的CH340G芯片不工作
  17. 通过企业微信或者微信公众号发送小程序消息推送功能
  18. jquery ready vue_我在切换路由器$(document).ready()失败时在模板中使用vue-router和jQuery...
  19. 2D图片转3D模型软件介绍
  20. 几乎每个人都听说过三皇五帝,那么三皇五帝是否存在?又是谁呢?

热门文章

  1. 微信点餐系统html,微信点餐系统,一种新型的点餐方式
  2. Apache2.4 HTTP服务器配置反向代理和负载均衡
  3. Jenkins笔记02-Jenkins安装和持续集成环境配置
  4. 水题poj1423 解题报告
  5. DNS云监控出现问题如何解决
  6. daphile的dsd设置_小块头有大能量 篇二:JaguarBoard之Daphile HiFi 畅享
  7. 个人永久性免费-Excel催化剂功能第105波-批量调整不规范的图形对象到单一单元格内存储...
  8. 11.1 p值的意义
  9. java编写连接数据库代码
  10. 学习文档【超详细中文版】(小甲鱼视频)