吴恩达Deep learning笔记(二)

Logistic Regression as a Neural Network

Binary Classification

视频中的例子: 给一张64x64像素的图片图片,判断是否含有猫

1、获取图片的RGB像素值

2、并unroll成一个vector

3、所有的vector组成数据集矩阵

特别注意,(X)的行是(n),列是(m),和Machine learning中的定义正好是转置的关系。这样有个好处,每条测试集在矩阵中都是以列向量的形式存在。



完整的notation,可以参考课程中提供的PDF: Standard notations for Deep Learning

Logistic Regression

1、问题描述:
Logsitic Regression要求输出y不是0就是1。The goal of logistic regression is to minimize the error between its predictions and training data.

2、sigmoid function

3、引入参数w, b,其实就是Machine learning中用的是θ,但DeepLearning中分别用w和b表示。其中w是vector,b是real number
4、这里 𝑦̂ 就是Machine learning里面的hypothesis function: h(θ)

Logistic Regression Cost Funciton

Gradient Descent

原理:按梯度最大的方向逼近最小值。

Logistic Regression Gradient Descent


虽然,测试集是离散的,但并不代表对w的倒数是离散的,这两者没有任何关系。始终注意:在gradient Descent的时候,x是常量

Gradient Descent on m Examples

Gradient Descent算法过程:

1、求导过程
求导过程又通常是先forward propagation求cost function,然后再backward propagation求到w和b的倒数
2、下降过程
使用到w和b的导数,迭代做梯度下降过程。

下面的截图就是一个非向量化的实现:左边是求导过程,右边是梯度下降过程

Python and Vectorization

Vectorization

即为转化成矩阵计算,可以有效地加快计算速度
并且CPU和GPU都更加擅于并行计算

More vectorization Examples

原则:whenever possible, avoid explict for-loops
使用Element wised的矩阵运算,将函数作用在每个矩阵元素上,比如:

  np.exp()
  np.log()
  np.abs()
  np.maxium()
  1/v
  v**2
Vectorizing logistic Regression

Vectorizing Logistic Regression’s Gradient Output

Broadcasting in Python

在matlab和Python中,都默认支持不同维度的变量做element-wised的计算(±x/等)。所谓Broadcasting其实就是高纬度数组和低纬度数组计算时,将低维的变量通过复制的方式向高维扩展维度,再做运算。但要注意:

低纬度数组与高纬度共有的维度,元素个数必须一样,比如一个shape是(5,3)的数组可以和一个shape是(5,)的数组相加,但不能和一个(4,)的数组相加。
维度相同的数组的数组,是不能broadcasting的,比如一个shape是(5,3)的数组和一个shape是(5,2)的数组运算,后者是无法broadcasting的
某个维度的个数是1,等同于这个维度不存在,可以broadcasting,比如shape是(5,3)和(5,1)的数组可以运算。

总的来说,就是broadcasting要做某个维度的复制,必须在赋值的时候行得通。比如shape是(5,3)和shape是(5,2)的数组运算,后者要将2复制为3是行不通的,因为存在两行,那取哪一行?

Andrew的一个经验:如果对某个数组的shape不确定,可以用reshape显式的调用一下,确保维度正确。

补充:numpy中,类似sum的函数,经常涉及axis参数,可以取值为0或1,甚至其他。经常记不住,这里我查了了一下,是这样的(原文):

axis的数字,和数组的shape参数的索引是对应的。比如一个数组的shape是(5,6),则代表5个row,6个column。即在shape中,row和column的个数的索引是0和1。也就第1个坐标,在shape中的第一个元素,索引是0,代表row的方向;第2个坐标,在shape中的第2个元素,索引是1,代表row的方向。
对于sum函数,axis指的是sum“沿着”的方向,经过计算,这个方向的维度因为求和后就消失了,比如sum(axis=0)代表是沿着“row”方向进行求和,
当然axis可以是一个tupe,那就相当于沿着多个多个方向求和。
sum如果不传入axis参数,默认是对所有维度求和。

A note on python/numpy vectors

broadcasting的一个弱点:可能隐藏潜在的错误,比如一个计算中本来要去两个运算的数组维度一样,如果没有broadcasting,就会直接报错;而broadcasting允许可继续执行。

rank 1 array问题:shape是(x,)的数组,既不是行向量,也不是列向量,没法参与正常的矩阵运算,应该总是使用(x,1)或(1,x)的shape来表示向量。但可以通过reshape方法将rank 1 array转换为行向量或列向量。(什么是rank,就是一个数组的维度)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值