Neural Networks and Deep Learning -- Class 2: Neural Network Basics

【课堂笔记】
2.1 二分分类
构建神经网络的技巧
构建过程 :正向+反向;logistic回归
样本 (x,y)
训练输入矩阵X nx行,m列 列向量堆叠 nx*m X.shape
训练输出矩阵Y 1*m
图片对应于3个矩阵(rgb),将其转换为特征向量 nx=12288
2.2 logistic回归
适用于二元分类问题
将b,w看成独立的参数会更好
2.3 logistics回归损失函数
cost function = (y^ -y)^2 会导致之后的优化问题变成 非凸的,梯度下降法可能找不到全局最优解,可能找到多个局部最优解

定义了在单个样本中的损失函数
总体成本函数(与参数w,b相关)
2.4 梯度下降法
成本函数为一个 凸函数,对于任意起点,均可收敛到或接近全局最优值
导数(仅有一个变量)与偏导(有多个变量)符号
2.5 导/数
斜率即导数
2.6 更多导数的例子
导数即斜率,函数的斜率在不同点处可以是不一样的
2.7 流程图
蓝色:正向
红色:反向,用于求导
2.8 计算图的导数计算
链式法则
dvar:最终关心的变量的导数
2.9 logistics回归中的梯度下降法
其中具体的每步求导还需要自己再实际做一下~
2.10 m个样本的梯度下降
dw1,dw2用作累加器,求取整个训练集上的和,没有上标i

双层循环:遍历样本,遍历特征
在代码中显式用for循环,会使代码很低效 => 用 向量化摆脱显式for循环
2.11 向量化
深度学习在大数据集上优势更明显
大数据集=>速度更快=>向量化
z=np.dot(w,x)+b np充分利用并行化来实现功能,速度更快 内置函数支持SIMD
SIMD: single instruction multiple data 单指令多数据流
GPU更擅长SIMD
np.dot() 实现矩阵乘法,均为一维向量时则取内积
2.12 向量化的更多例子
原则:尽量不用for循环!
矩阵乘法:np.dot(A,x) 避免双层for循环!
多使用内置函数 np.exp() np.log() np.abs() np.maximum() v**2 1/v
2.13 向量化logistic回归
Z=np.dot(wT,X)+b
A=sigmod(Z)
2.14 向量化logistic回归的梯度输出
db=1/m* np.sum(dZ) dZ: 列向量堆叠求和
dw=1/m*X*(dZ)T
2.15 Python中的广播
cal=A.sum(axis=0)
percentage=100*A/(cal.reshape(1,4))
python中矩阵尺寸不匹配时进行运算,小的矩阵自动广播,扩展成和大的矩阵相同,然后逐元素进行运算。
2.16 关于python/numpy向量的说明
不要使用(n,) 等秩为1的数组
np.random.randn(5,1) 列向量
np.random.randn(1,5) 行向量
assert(a.shape==(5,1)) 注意多用assert进行检查
a=a.reshape(1,5) 及时转换
2.17 jupyter/ ipython的快速指南
2.18 logistics损失函数的解释
最小化损失函数=最大化log(p(y|x))
-----------------------------------------------------------------------------
【作业整理】
错题:
10. 因为没加载出来图做错了,实际超简单
重点题目:
1. A neuron computes a linear function (z = Wx + b) followed by an activation function.
貌似第一眼看题时把followed by理解错了,注意这个先后顺序
3. x = img.reshape((32*32*3,1))
注意输入的均为列向量!
4. a = np.random.randn(2, 3) # a.shape = (2, 3)
b = np.random.randn(2, 1) # b.shape = (2, 1)
c = a + b
c.shape = (2, 3) + ,广播
5. a = np.random.randn(4, 3) # a.shape = (4, 3)
b = np.random.randn(3, 2) # b.shape = (3, 2)
c = a*b
It's going to be "Error"! * ,元素对应相乘,此处矩阵维度不匹配,会报错
np.dot() 矩阵乘法
9. a = np.random.randn(3, 3)
b = np.random.randn(3, 1)
c = a*b
这个时候通过扩展可以实现维度匹配,就可以实现广播啦~
8. # a.shape = (3,4)
# b.shape = (4,1)
for i in range(3):
for j in range(4):
c[i][j] = a[i][j] + b[j]
c = a + b.T
这道题还是不错的,需要认真思考一下





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值