coursera 地址

import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_datasettrain_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset(
)m_train = train_set_y.shape[1]  #训练集里图片的数量。
m_test = test_set_y.shape[1]  #测试集里图片的数量。
num_px = train_set_x_orig.shape[1]  #训练、测试集里面的图片的宽度和高度(均为64x64)。#现在看一看我们加载的东西的具体情况
print("训练集的数量: m_train = " + str(m_train))
print("测试集的数量 : m_test = " + str(m_test))
print("每张图片的宽/高 : num_px = " + str(num_px))
print("每张图片的大小 : (" + str(num_px) + ", " + str(num_px) + ", 3)")
print("训练集_图片的维数 train_set_x : " + str(train_set_x_orig.shape))
print("训练集_标签的维数 train_set_y : " + str(train_set_y.shape))
print("测试集_图片的维数 test_set_x : " + str(test_set_x_orig.shape))
print("测试集_标签的维数: test_set_y " + str(test_set_y.shape))#将训练集的维度降低并转置。
train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T
#将测试集的维度降低并转置。
test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0], -1).Tprint("训练集降维最后的维度:train_set_x_flatten  " + str(train_set_x_flatten.shape))
print("训练集_标签的维数 train_set_y : " + str(train_set_y.shape))
print("测试集降维之后的维度: test_set_x_flatten  " + str(test_set_x_flatten.shape))
print("测试集_标签的维数 test_set_y  : " + str(test_set_y.shape))
print("sanity check after reshaping: " + str(train_set_x_flatten[0:5, 0]))train_set_x = train_set_x_flatten / 255
test_set_x = test_set_x_flatten / 255def sigmoid(x):return 1/(1+np.exp(-x))def initialize_with_zeros(dim):"""This function creates a vector of zeros of shape (dim, 1) for w and initializes b to 0.Argument:dim -- size of the w vector we want (or number of parameters in this case)Returns:w -- initialized vector of shape (dim, 1)b -- initialized scalar (corresponds to the bias)"""w=np.zeros((dim,1))b=0assert(w.shape==(dim,1))assert(isinstance(b,float)or isinstance(b,int))return w,bprint("sigmoid(0) = " + str(sigmoid(0)))
print("sigmoid(9.2) = " + str(sigmoid(9.2)))dim = 2
w, b = initialize_with_zeros(dim)
print("w = " + str(w))
print("b = " + str(b))def propagate(w,b,X,Y):"""Implement the cost function and its gradient for the propagation explained aboveArguments:w -- weights, a numpy array of size (num_px * num_px * 3, 1)b -- bias, a scalarX -- data of size (num_px * num_px * 3, number of examples)Y -- true "label" vector (containing 0 if non-cat, 1 if cat) of size (1, number of examples)Return:cost -- negative log-likelihood cost for logistic regressiondw -- gradient of the loss with respect to w, thus same shape as wdb -- gradient of the loss with respect to b, thus same shape as bTips:- Write your code step by step for the propagation"""m=X.shape[1]#正向传播A=sigmoid(np.dot(w.T,X)+b)cost=(-1/m)*np.sum(Y*np.log(A)+(1-Y)*np.log(1-A))#整个训练集的损失函数#反向传播dw=1/m*np.dot(X,(A-Y).T)db=1/m*np.sum(A-Y)assert(dw.shape==w.shape)assert(db.dtype==float)cost=np.squeeze(cost)assert(cost.shape==())grads={'dw':dw,'db':db,}return grads,costw, b, X, Y = np.array([[1], [2]]), 2, np.array([[1, 2],[3, 4]]), np.array([[1, 0]])
grads, cost = propagate(w, b, X, Y)
print("dw = " + str(grads["dw"]))
print("db = " + str(grads["db"]))
print("cost = " + str(cost))def optimize(w,b,X,Y,num_iterations,learning_rate,print_cost=False):"""This function optimizes w and b by running a gradient descent algorithmArguments:w -- weights, a numpy array of size (num_px * num_px * 3, 1)b -- bias, a scalarX -- data of shape (num_px * num_px * 3, number of examples)Y -- true "label" vector (containing 0 if non-cat, 1 if cat), of shape (1, number of examples)num_iterations -- number of iterations of the optimization looplearning_rate -- learning rate of the gradient descent update ruleprint_cost -- True to print the loss every 100 stepsReturns:params -- dictionary containing the weights w and bias bgrads -- dictionary containing the gradients of the weights and bias with respect to the cost functioncosts -- list of all the costs computed during the optimization, this will be used to plot the learning curve.Tips:You basically need to write down two steps and iterate through them:1) Calculate the cost and the gradient for the current parameters. Use propagate().2) Update the parameters using gradient descent rule for w and b."""costs=[]for i in range(num_iterations):grads,cost=propagate(w,b,X,Y)dw=grads['dw']db=grads['db']w=w-learning_rate*dwb=b-learning_rate*dbif i%100==0:costs.append(cost)if print_cost and i%100==0:print("Cost after iteration %i:%f "%(i,cost))params={'w':w,'b':b,}grads={'dw':dw,'db':db,}return params,grads,costsparams, grads, costs = optimize(w,b,X,Y,num_iterations=100,learning_rate=0.009,print_cost=False)print("w = " + str(params["w"]))
print("b = " + str(params["b"]))
print("dw = " + str(grads["dw"]))
print("db = " + str(grads["db"]))def predict(w,b,X):'''Predict whether the label is 0 or 1 using learned logistic regression parameters (w, b)Arguments:w -- weights, a numpy array of size (num_px * num_px * 3, 1)b -- bias, a scalarX -- data of size (num_px * num_px * 3, number of examples)Returns:Y_prediction -- a numpy array (vector) containing all predictions (0/1) for the examples in X'''m=X.shape[1]Y_prediction=np.zeros((1,m))w=w.reshape(X.shape[0],1)# Compute vector "A" predicting the probabilities of a cat being present in the picture### START CODE HERE ### (≈ 1 line of code)A=sigmoid(np.dot(w.T,X)+b)### END CODE HERE ###for i in range(A.shape[1]):# Convert probabilities a[0,i] to actual predictions p[0,i]### START CODE HERE ### (≈ 4 lines of code)if A[0,i] >0.5 :Y_prediction[0,i]=1else:Y_prediction[0,i]=0assert(Y_prediction.shape==(1,m))return Y_predictionprint("predictions = " + str(predict(w, b, X)))def model(X_train,Y_train,X_test,Y_test,num_iterations=2000,learning_rate=0.5,print_cost=False):"""Builds the logistic regression model by calling the function you've implemented previouslyArguments:X_train -- training set represented by a numpy array of shape (num_px * num_px * 3, m_train)Y_train -- training labels represented by a numpy array (vector) of shape (1, m_train)X_test -- test set represented by a numpy array of shape (num_px * num_px * 3, m_test)Y_test -- test labels represented by a numpy array (vector) of shape (1, m_test)num_iterations -- hyperparameter representing the number of iterations to optimize the parameterslearning_rate -- hyperparameter representing the learning rate used in the update rule of optimize()print_cost -- Set to true to print the cost every 100 iterationsReturns:d -- dictionary containing information about the model."""w,b=initialize_with_zeros(X_train.shape[0])# Gradient descent (≈ 1 line of code)parameters,grads,costs=optimize(w,b,X_train,Y_train,num_iterations,learning_rate,print_cost)# Retrieve parameters w and b from dictionary "parameters"w=parameters['w']b=parameters['b']# Predict test/train set examples (≈ 2 lines of code)Y_predict_train=predict(w,b,X_train)Y_predict_test = predict(w, b, X_test)# Print train/test Errorsprint("train accuracy: {} %".format(100 - np.mean(np.abs(Y_predict_train - Y_train)) * 100))print("test accuracy: {} %".format(100 - np.mean(np.abs(Y_predict_test - Y_test)) * 100))d = {"costs": costs,"Y_prediction_test": Y_predict_test,"Y_prediction_train" : Y_predict_train,"w" : w,"b" : b,"learning_rate" : learning_rate,"num_iterations": num_iterations}return dd = model(train_set_x,train_set_y,test_set_x,test_set_y,num_iterations=2000,learning_rate=0.005,print_cost=True)# Plot learning curve (with costs)
costs = np.squeeze(d['costs'])
plt.plot(costs)
plt.ylabel('cost')
plt.xlabel('iterations (per hundreds)')
plt.title("Learning rate =" + str(d["learning_rate"]))
plt.show()

进一步分析

提醒:为了让梯度下降有效,你必须明智地选择学习速度。学习率α\alphaα决定了我们更新参数的速度。如果学习率太大,我们可能会“超出”最佳值。类似地,如果它太小,我们将需要太多的迭代来收敛到最佳值。这就是为什么使用良好的学习速度是至关重要的。

让我们将我们模型的学习曲线与几种学习率的选择进行比较。运行下面的单元格。这大约需要1分钟。也可以尝试不同于我们初始化的learning_rates变量所包含的三个值,看看会发生什么。

learning_rates = [0.01, 0.001, 0.0001]
models = {}
for i in learning_rates:print ("learning rate is: " + str(i))models[str(i)] = model(train_set_x, train_set_y, test_set_x, test_set_y, num_iterations = 1500, learning_rate = i, print_cost = False)print ('\n' + "-------------------------------------------------------" + '\n')for i in learning_rates:plt.plot(np.squeeze(models[str(i)]["costs"]), label= str(models[str(i)]["learning_rate"]))plt.ylabel('cost')
plt.xlabel('iterations')legend = plt.legend(loc='upper center', shadow=True)
frame = legend.get_frame()
frame.set_facecolor('0.90')
plt.show()

吴恩达深度学习coursework1相关推荐

  1. [转载]《吴恩达深度学习核心笔记》发布,黄海广博士整理!

    红色石头 深度学习专栏 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容全面.通俗易懂并配备了丰富的实战项目.今天,给大家推荐一份关于该专项课程的核心笔记 ...

  2. 737 页《吴恩达深度学习核心笔记》发布,黄海广博士整理!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 深度学习入门首推课程就是吴恩达的深度学习专项课程系列的 5 门课.该专项课程最大的特色就是内容 ...

  3. 吴恩达深度学习笔记1-Course1-Week1【深度学习概论】

    2018.5.7 吴恩达深度学习视频教程网址 网易云课堂:https://mooc.study.163.com/smartSpec/detail/1001319001.htm Coursera:htt ...

  4. 799页!吴恩达深度学习笔记.PDF

    吴恩达深度学习课程,是公认的最优秀的深度学习课程之一,目前没有教材,只有视频,本文提供完整笔记下载,这本笔记非常适合和深度学习入门. 0.导语 黄海广博士和同学将吴恩达老师深度学习视频课程做了完整的笔 ...

  5. 吴恩达深度学习课程的漫画版来了!(漫画、视频、笔记都可以下载了!)

    吴恩达深度学习课程,个人认为是对初学者最友好的课程,非常系统.初学者如果希望快速入门,建议从这门课开始.由于是视频课,除了课程笔记之外,可以先看看课程漫画,更有助于理解. 尽管是英文版,但英文水平达到 ...

  6. 360题带你走进深度学习!吴恩达深度学习课程测试题中英对照版发布

    吴恩达的深度学习课程(deepLearning.ai)是公认的入门深度学习的宝典,本站将课程的课后测试题进行了翻译,建议初学者学习.所有题目都翻译完毕,适合英文不好的同学学习. 主要翻译者:黄海广 内 ...

  7. github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

    吴恩达老师的深度学习课程(deeplearning.ai),可以说是深度学习入门的最热门课程,我和志愿者编写了这门课的笔记,并在github开源,star数达到8331+,曾经有相关报道文章.为解决g ...

  8. 深度学习入门首推资料--吴恩达深度学习全程笔记分享

    本文首发于微信公众号"StrongerTang",可打开微信搜一搜,或扫描文末二维码,关注查看更多文章. 原文链接:(https://mp.weixin.qq.com/s?__bi ...

  9. 花书+吴恩达深度学习(二九)生成随机网络 GSN

    文章目录 0. 前言 1. 生成随机网络 GSN 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深度学习(二七)深度生成模型之玻尔兹曼机及其变体(RBM, DB ...

最新文章

  1. 软件测试的测什么,软件测试人员应具备哪些能力?
  2. Xamarin 中Visual Studio创建项目提示错误
  3. oracle 9.2.0.2,在RedHat enterprise server 3 安装oracle9i 2.0.0.1 并升级到9.2.0.6
  4. java局部内部类 final_Java的局部内部类以及final类型的参数和变量
  5. 【NOIP2016提高A组五校联考2】running
  6. 手机端html使用地理定位,html5之使用地理定位
  7. oracle查看会话(常规操作)
  8. linux没有.brashrc文件,Linux 安装 Redis4.0.6
  9. 【Python】利用MD5文件去重
  10. meltdown linux检测,Linux操作系统已拥有自动化的Spectre/Meltdown检查器
  11. iPhone入门学习汇总
  12. 00. 微服务架构沉思录
  13. 前端学习——微信小程序
  14. 算法的浅论:算法前序
  15. 40网桥的基本概念及其原理
  16. 【iOS】获取App Store上的.ipa包
  17. 一个接口多个实现类的Spring注入方式(注解方式)
  18. agv ti 毫米波雷达_TI毫米波传感器全面覆盖工业自动化、自动驾驶与安防市场
  19. 计算机监控系统功能概述,物联网技术在计算机监控系统的应用
  20. Eclipse Shell for Plugin

热门文章

  1. Spring Boot idel 实现热部署
  2. 实习第一个月体会和总结
  3. 【自己开发小程序】自己怎么开发一个小程序呢?
  4. 宝塔Linux面板的安装配置以及基本使用教程(超详细)
  5. 错过一个订单后,吐槽下自己(顺便分享下书单),剧终版
  6. OPC UA协议网关
  7. JPAQuery日期分组查询
  8. 【STM32】定时器TIM触发ADC采样,DMA搬运到内存(超详细讲解)
  9. word2003流程图变成图片_转:Word2003  绘制流程图(2)
  10. scratch积木编程----[微进阶]打靶-上(简单非线性移动)