吴恩达深度学习课后习题(1-3)

做作业的一些代码,持续更新ing~

作业是参考下面的链接的,其中的一些数据集等可以在该链接获取:GitHub - AccumulateMore/CV: ✔(已完结)最全面的 深度学习 笔记【土堆 Pytorch】【李沐 动手学深度学习】【吴恩达 深度学习】

hw1

编写sigmoid函数

这个是sigmoid函数,函数的表达式是:1/1 + e-x

在np.exp(-x)中不要使用math.exp(-x),因为math.exp(-x)当你输入的是向量的话就会报错,所以用np.exp(-x)

注意:np.array([])采用这样的方式来定义,当你有多个向量的话,就用np.array([[1,2,3],[4,5,6],[7,8,9]])这样的方式定义

 import math
 import numpy as np
 ​
 def sigmoid(x):
     result = 1 / (1 + np.exp(-x))
     return result
 ​
 print(sigmoid(np.array([[1,2,3],[4,5,6],[7,8,9]])))

创建sigmoid_grad函数

计算sigmoid函数相对于其输入x的梯度。表达式是:sigmoid_derivative(x) = σ'(x)= σ(x)(1 - σ(x))

 import numpy as np
 ​
 def sigmoid(x):
     x = 1 / (1 + np.exp(-x))
     return x
 ​
 result = sigmoid(np.array([1,2,3]))*(1 - sigmoid(np.array([1,2,3])))
 print(result)

实现image2vector()

该输入采用维度为(length, height, depth)的输入,并返回维度为(length * height * depth, 1)的向量(相当于将高维向量展开成为一个1维向量)。

shape函数返回的是你的当前向量的维度大小,例如(3,3,2)代表着有三个元素,每个元素是3*2的矩阵。

 def image2vector(image):
     """
     Argument:
     image -- a numpy array of shape (length, height, depth)
     
     Returns:
     v -- a vector of shape (length*height*depth, 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]]])
 ​

执行 normalizeRows()来标准化矩阵的行

将此函数应用于输入矩阵x之后,x的每一行应为单位长度(即长度为1)向量。

 import numpy as np
 ​
 def normalizeRows(x):
     
     x_norm = np.linalg.norm(x, axis = 1, keepdims = True)
     
     return x/x_norm
 ​
 x = np.array([
     [0, 3, 4],
     [1, 6, 4]])
 print("normalizeRows(x) = " + str(normalizeRows(x)))

softmax函数:模型对于每个类别的预测概率

softmax函数会接受一个向量(或者一组原始预测值),然后输出一个同样长度的新向量,其中每个元素的值介于0到1之间,并且所有元素的和为1。这样,输出向量的每个元素可以被解释为模型对于每个类别的预测概率

softmax的函数表达式如下所示:

 def softmax(x):
     """Calculates the softmax for each row of the input x.
 ​
     Your code should work for a row vector and also for matrices of shape (n, m).
 ​
     Argument:
     x -- A numpy matrix of shape (n,m)
 ​
     Returns:
     s -- A numpy matrix equal to the softmax of x, of shape (n,m)
     """
     x_exp = np.exp(x)
     x_sum = np.sum(x_exp, axis = 1, keepdims = True)
     
     print(x_exp.shape)
     print(x_sum.shape)
     
     s = x_exp / x_sum
     
     return s

hw2

识别输入的图像是否是猫,步骤按照下面进行

下面的操作是在jupyter环境中使用的

导入需要使用的包

 import numpy as np
 import matplotlib.pyplot as plt
 from lr_utils import load_dataset
 ​
 %matplotlib inline

导入数据集

在下载的数据集文件目录下创建jupyter文件

  •  train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()
     # load_dataset在wed_dataseet/wed/lr_utils.py中,可以查看是如何加载数据的,具体的load_dataset代码如下:
 import numpy as np
 import h5py
     
     
 def load_dataset():
     train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")
     train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # 从train_dataset数据集中取出所有键为train_set_x的y值,并将这些值转换为numpy数值
     train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # 同理
 ​
     test_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")
     test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # 从test_dataset数据集中取出所有键为train_set_x的y值,并将这些值转换为numpy数值
     test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # 同理
 ​
     classes = np.array(test_dataset["list_classes"][:]) # 表示图片是不是猫,结果是'non-cat'或'cat'
     
     train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0])) # 将train_set_y_orig
     test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
     
     return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes

查看训练数据集以及测试集中的图片数据

 index = 5
 plt.imshow(train_set_x_orig[index]) # 要显示的图像数据,index=5查看的就是第五张图片
 print ("y = " + str(train_set_y[:, index]) + ", it's a '" + classes[np.squeeze(train_set_y[:, index])].decode("utf-8") +  "' picture.")  # y = [0]表示的是不是猫,y = [1]表示的是这是猫

查看数据集中的图片的数量以及图片的长度和宽度

 m_train = train_set_x_orig.shape[0]   
 m_test = test_set_x_orig.shape[0]     
 num_px = train_set_x_orig.shape[1]    
 num_py = train_set_x_orig.shape[2] 
 # shape[0]表示的是数据集中包含多少张图像
 # shape[1]表示的是图像有多少行(即图像
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值