1.二分分类
符号约定:
2.logistic回归
w,x为特征向量,b为常数,w,b为参数,y的取值范围是0-1
函数图像:
3.logisitic回归损失
损失(误差)函数:衡量单个训练样本算法的运行情况
损失函数要尽可能的小,所以
成本函数(cast function):衡量在全体训练样本上的表现
4.梯度下降算法
从初始点开始,朝最陡的方向走,直至收敛到全局最优点
5.导数
6.计算图
计算图也叫数据流图,可以把计算图看做是一种有向图,每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系
7.计算图的导数计算
微积分链规则:如果x -> y -> z (x影响y和y影响z)那么d(z)/d(x) = d(z)/d(y) * d(y)/d(x)
编程约定:代表着相对于各种中间量的最终输出变量的导数。
即:
8.logsitic回归中的梯度下降法
d(a) = d(l)/d(a) = -(y/a) + ((1-y)/(1-a))
d(z) = d(l)/d(z) = a - y
d(W1) = X1 * d(z)
d(W2) = X2 * d(z)
d(B) = d(z)
w1 = w1 - alpa * dw1
w2 = w2 - alpa * dw2
b = b - alpa * db
9.m个样本的梯度下降
逻辑回归伪代码:
J = 0; dw1 = 0; dw2 =0; db = 0; # Devs.
w1 = 0; w2 = 0; b=0; # Weights
for i = 1 to m
# Forward pass
z(i) = W1*x1(i) + W2*x2(i) + b
a(i) = Sigmoid(z(i))
J += (Y(i)*log(a(i)) + (1-Y(i))*log(1-a(i)))
# Backward pass
dz(i) = a(i) - Y(i)
dw1 += dz(i) * x1(i)
dw2 += dz(i) * x2(i)
db += dz(i)
J /= m
dw1/= m
dw2/= m
db/= m
# Gradient descent
w1 = w1 - alpa * dw1
w2 = w2 - alpa * dw2
b = b - alpa * db
10.向量化
尽可能避免循环
NumPy库(点)功能默认使用向量化
向量化可以在CPU或GPU上完成,并认为SIMD(单指令多数据)操作
11.向量化logistics回归
作为一个输入,我们有一个矩阵X及其[Nx, m]矩阵Y及其矩阵[Ny, m]
12.python中的广播
在NumPy中,obj.sum(axis = 0)和obj.sum(axis = 1)对行进行求和和对各列进行求和。
在NumPy中,obj.reshape(1,4)通过广播这些值来更改矩阵的形状。
reshape()在计算上很便宜,因此无论你对计算还是不确定的地方,它都会变得很重要。
当您使用与操作不匹配的矩阵进行矩阵运算时,广播可以工作,在这种情况下,NumPy通过广播这些值自动使形状准备就绪。
13.关于python/numpy的说明
如果你没有指定矢量的形状,它将采用一个形状,(m,)并且转置操作将不起作用。你必须reshape它(m, 1)
assert(a.shape == (5,1))用来检查你的矩阵形状是否是必需的
14.jupyter笔记的快速指南
要打开Jupyter Notebook,打开命令行并调用:
jupyter-notebook #sudo jupyter-notebook –allow-root
计算Sigmoid的导数:
s = sigmoid(x)ds = s * (1 - s) # derivative using calculus
要制作(width,height,depth)一个矢量图像,请使用以下命令:
v = image.reshape(image.shape[0]*image.shape[1]*image.shape[2],1) #reshapes the image.
15.实践
使用Shift + Enter(或“运行单元格”)运行单元格
Numpy社区:www.numpy.org
快速访问文档:库名.函数名? 例如:np.exp?
16.1 numpy基础函数:
sigmoid gradient :
s = 1/(1+np.exp(-x))
ds =s*(1-s)
将三维图片转化为一维向量:
v = image.reshape(image.shape[0]*image.shape[1]*image.shape[2],1)
求范式:获得更好的性能:
x_norm = np.linalg.norm(x,axis=1,keepdims=True)
x = x/x_norm
softmax:
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的Softmax值就是
S_i = \frac{e^{V_i}}{\sum_j{e^{V_j}}}也就是说,是该元素的指数,与所有元素指数和的比值
x_exp = np.exp(x)
x_sum = np.sum(x_exp,axis=1,keepdims=True)
s = x_exp/x_sum
16.2 向量
损失:
loss1 = np.sum(abs(yhat-y))
loss2= np.dot(y-yhat,y-yhat)
16.3 包
numpy是用Python进行科学计算的基本软件包。
h5py是与H5文件中存储的数据集进行交互的常用软件包。
matplotlib是一个着名的库,用于在Python中绘制图表。
使用PIL和scipy来测试模型
16.4预处理新数据集的常见步骤如下:
找出问题的尺寸和形状(m_train,m_test,num_px,…)
重塑数据集,使每个示例现在成为一个大小的向量(num_px * num_px * 3,1)
“标准化”数据
16.5建立神经网络的主要步骤是:
定义模型结构(如输入特征和输出的数量)
初始化模型的参数。
循环。
计算当前损失(正向传播)
计算当前梯度(反向传播)
更新参数(梯度下降)
kaggle.com是数据集和竞赛的好地方。
Pieter Abbeel是深度强化学习中最好的之一。