deeplearning.ai

吴恩达deeplearning.ai_课程学习

2018-12-25  本文已影响0人  2e07917c964c

一、笔记及作业:主要自己跑了下下面的代码

运行环境:mac os 10.13.6 + python3.7.1

1、作业及代码:见我的github主页

参考 :【目录】【中文】【deplearning.ai】【吴恩达课后作业目录】,这个作业目录中的内容主要是参考的Deep Learning Specialization on Coursera

2、学习笔记:吴恩达《深度学习》系列课程笔记,也可以注意看他的参考资料。

二、函数

1、np.squeeze()

作用:从数组的形状中删除单维度条目,即把shape中为1的维度去掉
参考:
numpy的squeeze函数 - tracy_leaf的博客 - CSDN博客
numpy.squeeze()的用法 - hezhiyao - 博客园

2、plt.scatter():

plt.scatter()PYthon——plt.scatter各参数详解

3、db1 = (1 / m) * np.sum(dZ1, axis=1, keepdims=True) 中 keepdims=True 的作用是:

保持矩阵维数不变。对axis进行指定轴操作会使矩阵降维,使用 keepdims=True 会使消失的轴保留,并保持维度为1。
参考:numpy中keepdims的理解numpy中维度的正确理解姿势

4、python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别

参考:
python中np.multiply()、np.dot()和星号(*)三种乘法运算的区别

5、python中的列表:

它的索引是从0开始的,比如list = ["a", "b", "c", "d”]时,list[3]=“d”。

参考:Python3 列表

6、range() :

作用:可创建一个整数列表
语法:range(start, stop,[step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

参考:Python range() 函数用法

7、[X,Y] = np.meshgrid(x,y)

作用:生成网格数据。即:以x中的数据为横坐标,y中的数据为纵坐标,进行描点画线,所得到的所有点(以从左到右从下到上的顺序)的横坐标为X,纵坐标为Y。

参考 :Numpy中Meshgrid函数介绍及2种应用场景

8、plt.contour()或plt.contour()

作用:绘制等高线图

参考:Matplotlib 中等高线图(contour)的绘制matplotlib学习—画等高线图

9、numpy中的ravel()、flatten()、squeeze()的用法与区别

numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:

参考:

10、Python Numpy模块函数np.c_和np.r_的区别

参考:

11、理解决策边界的可视化:

Course 2 - 改善深层神经网络 - 第一周作业中,吴恩达写的决策边界绘图函数为:
init_utils.plot_decision_boundary(lambda x: init_utils.predict_dec(parameters, x.T), train_X, np.squeeze(train_Y))
(1)其中,plot_decision_boundary()函数为:

def plot_decision_boundary(model, X, y):
    # Set min and max values and give it some padding
    x_min, x_max = X[0, :].min() - 1, X[0, :].max() + 1
    y_min, y_max = X[1, :].min() - 1, X[1, :].max() + 1
    h = 0.01
    # Generate a grid of points with distance h between them  以 h 为间隔生成网格数据
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    # Predict the function value for the whole grid
    Z = model(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    # Plot the contour and training examples
    plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)  # 画三维等高线图
    plt.ylabel('x2')
    plt.xlabel('x1')
    plt.scatter(X[0, :], X[1, :], c=y, cmap=plt.cm.Spectral)
    plt.show()

①要理解plot_decision_boundary()函数,必须要理解[X,Y] = np.meshgrid(x,y),它的理解见本节中第7个函数。
②要理解plot_decision_boundary()函数,必须要理解plt.contour()或plt.contour(),它的理解见本节中第8个函数。
③要理解plot_decision_boundary()函数,必须要理解本节中第9、10个函数。

(2)predict_dec(parameters, X)函数的作用是:对输入数据X用训练后的模型进行预测并把预测概率变为对应的标签。其具体如下:

def predict_dec(parameters, X):
    """
    Used for plotting decision boundary.
    
    Arguments:
    parameters -- python dictionary containing your parameters 
    X -- input data of size (m, K)
    
    Returns
    predictions -- vector of predictions of our model (red: 0 / blue: 1)
    """
    
    # Predict using forward propagation and a classification threshold of 0.5
    a3, cache = forward_propagation(X, parameters)
    predictions = (a3>0.5)
    return predictions
12、assert,lambda,filter的用法及作用

python学习-assert,lambda,filter的用法及作用

13、np.linalg.norm()

作用:求矩阵或向量的范数
参考:np.linalg.norm(求范数)

14、np.random.permutation()和np.random.shuffle()的区别
相同:

注意:如果它们的参数是多维数组,而不是1维数组,那么就是打乱维度间的顺序,而不打乱某一维内的各个元素的顺序。比如:

>>arr = np.arange(9).reshape((3, 3))
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>np.random.permutation(arr)
array([[6, 7, 8],
       [0, 1, 2],
       [3, 4, 5]]) 
不同:
def permutation(self, object x):
    '''这里都是帮助文档,我就省略了'''
    if isinstance(x, (int, long, np.integer)): # 如果是整数,就返回随机序列
        arr = np.arange(x)
    else:
        arr = np.array(x) # 如果是数组,就返回数组,再用shuffle随机打乱这个数组
    self.shuffle(arr)
    return arr

另外,如果要利用此函数对输入数据X、Y进行随机排序,且要求随机排序后的X Y中的值保持原来的对应关系,可以这样处理:

permutation = list(np.random.permutation(m))  #m为样本数。把随机整数数组变为一个序列
shuffled_X = X[:, permutation] 
shuffled_Y = Y[:, permutation].reshape((1,m))

参考:

三、问题:

四、课程1_知识点:

1、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 score、P-R曲线、ROC曲线、AUC

真正(True Positive , TP)被模型预测为正的正样本
假负(False Negative , FN)被模型预测为负的正样本
假正(False Positive , FP)被模型预测为正的负样本
真负(True Negative , TN)被模型预测为负的负样本

P : 正样本数,P = TP+FN ;
N : 负样本数,N = FP+TN

参考:
2、神经网络层数:

神经网络层数 = 隐藏层数+输出层 = 隐藏层数+1

3、logistic回归 可以把权重初始化为0,但是神经网络不能把权重全部初始化为0.

参考:Ng的deeplearning.ai课程中『神经网线与深度学习』部分中第四周的『随机初始化』一讲。

五 、课程2_知识点

1、要确保:验证集和测试集来自于同一个分布(数据来源一致)。可以使得机器学习算法变得更快并获得更好的效果。

如果不需要用无偏估计来评估模型的性能,则可以不需要测试集。

2、

3、数据集划分比例:
(1)在 小数据量 的时代,如 100、1000、10000 的数据量大小,可以将数据集按照以下比例进行划分(顺序是:训练集、验证集、测试集):

(2)在 大数据 的时代:

4、怎么判断一个模型是否出现高偏差(high bias)和高方差(high variance)?

5、存在高偏差高方差时应该怎么办?
(1)存在高偏差

(2)存在高方差

6、怎么判断一个模型是否出现欠拟合过拟合

7、为什么正则化可以减少过拟合?

8、反向随机失活(Inverted dropout)是实现 dropout 的方法。对第l层进行 dropout:

keep_prob = 0.8    # 设置神经元保留概率
dl = np.random.rand(al.shape[0], al.shape[1]) < keep_prob # dl是第l层dropout向量
al = np.multiply(al, dl)
al /= keep_prob # 因为有这一步,所以才叫反向随机失活

最后一步al /= keep_prob是因为 a^{[l]}中的一部分元素失活(相当于被归零),为了在下一层计算时不影响 Z^{[l+1]}=W^{[l+1]}a^{[l]}+b^{[l+1]}的期望值,因此除以一个keep_prob。因为这里的前向传播中A^{[L]}除以了keep_prob,所以为了保持一致在反向传播中计算它的梯度dA^{[L]}时也需要相应的除以keep_prob。现在实现dropout的常用方法是反向随机失活,而dropout早期版本没有除以keep_prob,所以在测试阶段平均值会变得越来越复杂。也正是因为除以keep_prob,所以在测试阶段不使用dropout时,才不用另外加尺度参数来确保激活函数的期望不变。

注意,在测试阶段不要使用 dropout,因为那样会使得预测结果变得随机。

9、dropout和正则化的相同点:
dropout随机删除网络中神经元,所以好像每次迭代后,神经网络会变得比以前小;而正则化也是使权重接近于0,从而使得一些神经元失效或影响减弱,也相当于减小了神经网络,所以dropout和正则化的效果是一样的,都相当于权重衰减。

10、dropout 的一大缺点是成本函数无法被明确定义。因为每次迭代都会随机消除一些神经元结点的影响,因此无法确保成本函数单调递减。因此,使用 dropout 时,先将keep_prob全部设置为 1.0 后运行代码,确保 J(w,b)函数单调递减,再打开 dropout。

11、理解『指数加权平均』

上一篇 下一篇

猜你喜欢

热点阅读