美文网首页
deeplearning 课后作业(课程一第二周作业1)

deeplearning 课后作业(课程一第二周作业1)

作者: 此间不留白 | 来源:发表于2019-09-24 21:22 被阅读0次

    1. Python和Numpy编程基础

    deeplearning.ai官网地址:https://www.deeplearning.ai/
    coursera地址:https://www.coursera.org/specializations/deep-learning
    网易视频地址:https://163.lu/nPtn42
    课程一第二周课后作业1-1

    • 使用Numpy构造基础数学函数

    numpy是一个python中基础的科学计算包,以下练习中,将会实现一些数学中的基础函数,如np.log(),np.exp()等。

    对于机器学习中的逻辑回归激活函数,表达式为\delta = \frac{1}{1+e^{-z}},对于此公式,考虑到参数z是一个实数,可以简单的使用python中的math实现。

    import math
    def sigmoid(z):
      return 1/(1+math.exp(-z))
    

    以上实现中,实际能够传入的参数z只能是一个数字,而在机器学习或者深度学习中,实际需要传入的参数是一个向量,所以math.exp()并不适用,可以使用numpy.exp()实现,如下所示:

    import numpy as np
    def sigmoid(z):
      sigmoid = 1/(1+np.exp(-z))
      return sigmoid
    

    对于一个向量而言,np.exp()的实现过程就是对向量中的每一个元素计算np.exp(),可以如下图表示:

    • 实现激活函数梯度

    在之前的学习中,需要计算梯度优化使用反向传播算法的损失函数,对于此梯度的计算公式可以如下表示:
    \delta'(z) = \delta(z)*(1-\delta(z))

    代码实如下所示:

    def sigmoid_derivative(z):
      s = sigmoid(z)
      ds = s(1-s)
      return ds
    
    • 改变矩阵(向量)形状

    关于深度学习中,numpy中最常用到的两个跟矩阵或者向量形状有关的函数是shape()reshape()

    1. shape():返回当前矩阵或者向量的大小。
    2. reshape():将当前数组转化为特定形状。

    具体一些用法如下所示;
    将一个三维图像矩阵(shape=(length,height,depth)),转化为一维数组(shape = (lenght×height×depth,1))以便于处理,具体实现方法可以由以下代码所示:

    def image2vector(image):
        v = image.reshape(image.shape[0] * image.shape[1] * image.shape[2], 1)  
        return v
    
    • 按行标准化:

    机器学习或者深度学习中,常常用到的一个数据预处理技巧是标准化,标准化后的数据能够使得算法运行速度更快,关于数据标准化的公式如下所示:

    normal = \frac{x}{||x||}

    其中,||x||表示范数,对于一个向量[x_1,x_2……x_n],其范数计

    算公式为\sqrt{x_1^{2}+x_2^{2}+···x_n^{2}}

    numpy已经提供了用于计算范数的函数,所以其数据标准化的处理过程可以用以下代码实现:

    def normalizeRows(x):
        x_norm = np.linalg.norm(x, axis = 1, keepdims = True)
        x = x / x_norm
        return x
    
    • Python广播机制和softmax函数

    为了理解python中的广播机制,一种行之有效的方法是操作两个维数不同的矩阵。使用numpy中的softmax函数理解python中的广播机制,可以将softmax函数认为是你的算法需要实现二分类或者更多分类时的数据标准化函数,其数学表示如下所示:

    其实现代码如下所示:

    import numpy as np
    def softmax(x):
      x_exp = np.exp(x)
      x_sum = np.sum(x_exp,axis=1,keepdims = True)
      return x_exp/x_sum
    

    2. 关于两个损失函数的实现

    在深度学习中,损失函数常用来评估模型性能,如果损失函数的值越大,代表着模型的预测值与真实值之间的差值越大,深度学习中常用梯度下降算法来优化算法以最小化损失函数。

    • L1损失函数

    L1损失函数的定义如下所示:
    \begin{align*} & L_1(\hat{y}, y) = \sum_{i=0}^m|y^{(i)} - \hat{y}^{(i)}|\end{align*}

    其代码实现如下所示:

    def L1(y,yhat):
      loss = np.sum(np.abs(y-yhat))
      return loss
    
    • L2损失函数

    L2损失函数的定义如下所示:
    \begin{align*} & L_2(\hat{y},y) = \sum_{i=0}^m(y^{(i)} -\hat{y}^{(i)})^2 \end{align*}
    注意:对于一个向量[X] = [x_1,x_2,···x_n]np.dot()的计算过

    程为:np.dot(x,x) =\sum_{i=0}^{n}x_i^{2},所以L2损失函数的一种有效计算方式是利用dot()函数,具体实现代码如下所示:

    def L2(y,yhat):
      loss = np.sum(np.dot((y-yhat),(y-yhat).T))
      return loss
    

    相关文章

      网友评论

          本文标题:deeplearning 课后作业(课程一第二周作业1)

          本文链接:https://www.haomeiwen.com/subject/fxktuctx.html