神经网络与深度学习编程练习(coursera 吴恩达 )(3)
完整实现多层神经网络识别图片中的猫
原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)相关推荐
- 深度学习(二)吴恩达给你的人工智能第一课: 02.改善深层神经网络:超参数调试、正则化以及优化
目录 第一周 深度学习的实用层面 1.1 训练 / 开发 / 测试集 1.1.1. 训练集.验证集.测试集 1.2 偏差 / 方差 1.3 机器学习基础 1.3.1.降低偏差/降低 ...
- 这份深度学习课程笔记获吴恩达点赞
来源:机器之心 本文共7470字,建议阅读8分钟. 通过本文用优美的信息图为大家解读深度学习课程的知识与亮点~ 吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图,这 ...
- 深度学习系列作业1----by 吴恩达
import numpy as np import matplotlib.pyplot as plt import h5py # 是与数据集(存储在H5文件中的数据集)交互的常用软件包 import ...
- Coursera吴恩达《深度学习》课程总结(全)
这里有Coursera吴恩达<深度学习>课程的完整学习笔记,一共5门课:<神经网络和深度学习>.<改善深层神经网络>.<结构化机器学习项目>.<卷 ...
- 5-1 Coursera吴恩达《序列模型》 第一周课程笔记-循环序列网络(RNN)
记录吴恩达Andrew Ng深度学习专项课程笔记,方便之后回顾,共5门课.第一门课<神经网络与深度学习>(Neural Networks and Deep Learning)的4周课程笔记 ...
- Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面
红色石头的个人网站:redstonewill.com Andrew Ng的深度学习专项课程的第一门课<Neural Networks and Deep Learning>的5份笔记我已经整 ...
- 2-3 Coursera吴恩达《改善深度神经网络》第三周课程笔记-超参数调试、Batch正则化和编程框架
上节课2-2 Coursera吴恩达<改善深度神经网络>第二周课程笔记-优化算法我们主要介绍了深度神经网络的优化算法.包括对原始数据集进行分割,使用mini-batch 梯度下降(mini ...
- Coursera吴恩达《优化深度神经网络》课程笔记(3)-- 超参数调试、Batch正则化和编程框架
红色石头的个人网站:redstonewill.com 上节课我们主要介绍了深度神经网络的优化算法.包括对原始数据集进行分割,使用mini-batch gradient descent.然后介绍了指数加 ...
- Coursera吴恩达《卷积神经网络》课程笔记(2)-- 深度卷积模型:案例研究
红色石头的个人网站:redstonewill.com <Convolutional Neural Networks>是Andrw Ng深度学习专项课程中的第四门课.这门课主要介绍卷积神经网 ...
最新文章
- Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh
- 08年度世界最佳照片(三)
- JLOI2015 战争调度
- JAVA集合泛型,类型擦除,类型通配符上限之类的知识点
- html dom获得父div,获取元素的父div
- ElementUI的el-cascader级联选择器各个属性的设置
- 邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单
- 初始化懒惰关系以及何时使用它们的5种方法
- 《RabbitMQ 实战指南》第一章 RabbitMQ 简介
- c语言基础编程题山东科技大学,C语言练习题〔山东科技大学吐血整理〕.doc
- 利用Gabor变换法分析纹理图像 matlab代码实现
- PMSM FOC控制 Matlab/Simulink仿真之反Clark变换
- everest任务栏设置
- 试用期不合格通知单可以签吗?
- 【第一课】UAV倾斜摄影测量技术
- 焊接好的CH340G芯片不工作
- 通过企业微信或者微信公众号发送小程序消息推送功能
- jquery ready vue_我在切换路由器$(document).ready()失败时在模板中使用vue-router和jQuery...
- 2D图片转3D模型软件介绍
- 几乎每个人都听说过三皇五帝,那么三皇五帝是否存在?又是谁呢?
热门文章
- 微信点餐系统html,微信点餐系统,一种新型的点餐方式
- Apache2.4 HTTP服务器配置反向代理和负载均衡
- Jenkins笔记02-Jenkins安装和持续集成环境配置
- 水题poj1423 解题报告
- DNS云监控出现问题如何解决
- daphile的dsd设置_小块头有大能量 篇二:JaguarBoard之Daphile HiFi 畅享
- 个人永久性免费-Excel催化剂功能第105波-批量调整不规范的图形对象到单一单元格内存储...
- 11.1 p值的意义
- java编写连接数据库代码
- 学习文档【超详细中文版】(小甲鱼视频)