吴恩达深度学习编程作业 part 1-1

import numpy as np
import matplotlib.pyplot as plt
import h5py
import scipy
from PIL import Image
from scipy import ndimage
% matplotlib inline

第一部分: python 的numpy 基础练习

1.1“sigmoid ”

def sigmoid(x):
    """
    计算x的sigmoid
    
    参数:
    x 是一个值 或者一个数列,范围是无穷
    
    返回:
     s -- simoid(x)
     
    """
    s = 1.0/(1+1/np.exp(x))
    return s
  • 测试当x是一个值或者一个数列时候不同结果
print('x is a number of 3',sigmoid(3))
print('x is a array of [1,2,3]',sigmoid(np.array([1,2,3])))
0utput:

x is a number of 3 0.9525741268224334
x is a array of [1,2,3] [0.73105858 0.88079708 0.95257413]

1.2 编写sigmoid_derivative方法实现sigmoid 梯度计算

sigmoid 的代价函数和推导过程可以看吴恩达老师的讲解,很好很详细。
我们直接引入代价函数。
在这里插入图片描述
补充一下sigmoid中对z的求导a*(1-a)的推导过程:
在这里插入图片描述
由上面公式得出对sigmoid求导

def sigmoid_derivative(x):
    s = 1/(1+1/np.exp(x))
    ds = s*(1-s)
    return ds

1.3 引入猫的图片

开始练习矩阵的形状处理 ,这个图形其实可以理解成一个魔方。如果你了解图片rgb通道的话很容易就可以理解了。
在这里插入图片描述
在没有涉及卷积网络的时候我们把矩阵处理成一维。

def image2vector(image):
    """
    把一个m*n*z 的图形矩阵变成 m*n*z 行 1列的矩阵
    """
    v = image.reshape((image.shape[0]*image.shape[1]*image.shape[2]),1)
    return v

测试一下:

image = np.array([[[ 0.67826139,  0.29380381],
        [ 0.90714982,  0.52835647],
        [ 0.4215251 ,  0.45017551]],

       [[ 0.92814219,  0.96677647],
        [ 0.85304703,  0.52351845],
        [ 0.19981397,  0.27417313]],

       [[ 0.60659855,  0.00533165],
        [ 0.10820313,  0.49978937],
        [ 0.34144279,  0.94630077]]])

print ("image2vector(image) = " + str(image2vector(image)))

output:
image2vector(image) = [[0.67826139]
[0.29380381]
[0.90714982]
[0.52835647]
[0.4215251 ]
[0.45017551]
[0.92814219]
[0.96677647]
[0.85304703]
[0.52351845]
[0.19981397]
[0.27417313]
[0.60659855]
[0.00533165]
[0.10820313]
[0.49978937]
[0.34144279]
[0.94630077]]

1.4 规范行

规范化就是矩阵除以矩阵的莫(范数),为了让梯度下降更快 例如矩阵 A = [ 1 2 4 3 3 1 ] A = \left[ \begin{matrix} 1 & 2&4\\ 3& 3&1 \end{matrix} \right] A=[132341]的横向模(范数)= [ ( 1 2 + 2 2 + 4 2 ) ( 3 2 + 3 2 + 1 2 ) ] \left[ \begin{matrix}\sqrt{(1^2+2^2+4^2)}\\ \sqrt{(3^2+3^2+1^2)}\end{matrix} \right] [(12+22+42) (32+32+12) ]

def normalizeRows(x):
    #求出范数矩阵
    x_norm = np.linalg.norm(x, axis=1, keepdims = True)
    #值除以范数
    x = x / x_norm  
   
    return x

测试一下:

x = np.array([
    [0, 3, 4],
    [1, 6, 4]])
print("normalizeRows(x) = " + str(normalizeRows(x)))

output:
normalizeRows(x) = [[0. 0.6 0.8 ]
[0.13736056 0.82416338 0.54944226]]

1.5广播和softmax功能

练习:使用numpy 实现softmax函数,你可以将softmax视为当你的算法需要更多类进行分类时使用的规范化函数(softmax 相当于一种特殊的sigmoid,适用于多分类)

def softmax(x):
    """
    计算输入x的每一行的softmax。

    您的代码应该适用于行向量和形状矩阵(n, m)。

    提要:
    x——形状的numpy矩阵(n,m)

    返回:
    s——一个numpy矩阵,它等于(n,m)的softmax (x)
    """

    #e的指数
    x_exp = np.exp(x) 

    #e的指数求和(这是个n*1)的矩阵
    x_sum = np.sum(x_exp, axis = 1, keepdims = True) 
    s = x_exp / x_sum 
    return s

测试:

x = np.array([
    [0, 3, 4],
    [1, 6, 4]])
softmax(x)

output:
array([[0.01321289, 0.26538793, 0.72139918],
[0.00589975, 0.8756006 , 0.11849965]])

1.6 矢量化

在深度学习中,处理非常大数据集,确保代码具有计算效率所以需要使用矢量化

下面实现L1 L2的损失函数

def L1(yhat,y):
    loss = np.sum(np.abs(y-yhat))
    return loss
def L2(yhat, y):
    loss =np.sum(np.power((y - yhat), 2))
    return loss
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值