【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第二周作业 - 具有神经网络思维的Logistic回归

本文是作者学习吴恩达课程的编程作业笔记,内容涉及使用Python进行Logistic回归的实现,包括数据预处理、神经网络模型搭建、前向传播、反向传播、梯度下降等步骤。通过实验发现,学习率和迭代次数对模型性能有显著影响。
摘要由CSDN通过智能技术生成

在开始之前,首先声明本文是作为一个初学者的学习笔记,在学习CSDN博主「何宽」的原创文章,原文链接:https://blog.csdn.net/u013733326/article/details/79639509 【吴恩达课后编程作业】Course 1 - 神经网络和深度学习 - 第二周作业 - 具有神经网络思维的Logistic回归时,碰到一些问题,所以做了总结,方便自己之后碰到问题可以回头查阅。如有不妥的地方欢迎大家指正,如果大佬不喜欢我可以给他删掉。
——————————————————————————————————————————————————————————
大佬上传的的资料在百度网盘,提取码:2u3w 。点此处下载:[百度网盘]。(https://pan.baidu.com/s/1I4MBm7QwRGuQDp-IZc9P1Q&shfl=sharepset)
——————————————————————————————————————————————————————————
一、我们首先进行训练所需要的数据的准备
1.
在这个加载数据集的脚本之中,请注意修改加载数据集的地址,并且地址中要用这个斜杠:/而不可以用这个:\

import numpy as np
import h5py
    
    
def load_dataset():
    train_dataset = h5py.File('D:/python__work/cats/datasets/train_catvnoncat.h5', "r")
    train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels

    test_dataset = h5py.File('D:/python__work/cats/datasets/test_catvnoncat.h5', "r")
    test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels

    classes = np.array(test_dataset["list_classes"][:]) # the list of classes
    
    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
    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

2、引用各个需要的库

numpy :是用Python进行科学计算的基本软件包。
h5py:是与H5文件中存储的数据集进行交互的常用软件包。
matplotlib:是一个著名的库,用于在Python中绘制图表。
lr_utils :在本文的资料包里,一个加载资料包里面的数据的简单功能的库。
import numpy as np
import h5py
import matplotlib.pyplot as plt 
from lr_utils import load_dataset

3、我们使用资料中自带的脚本,将数据集导入进来,下面是查看第26张图像和y集合的代码。其中y集合是判断是否是猫的正确答案。
问题:按照大佬的程序我的图片没有显示出来。
结果:加了一行plt.show()以后就ok了。

train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()
index = 25      
plt.imshow(train_set_x_orig[index])
plt.show()     #如果没有这一行,不会显示图片的哦

运行结果如下:
**数据集中的第26个图片**

4、接下来我们查看一些想要知道的参数,例如:Y的内容与格式,图片信息是以怎样的形式保存在train_set_x_orig之中。

m_train = train_set_y.shape[1]
m_test = test_set_y.shape[1]
mum_px = train_set_x_orig.shape[1]
mum_py = train_set_x_orig.shape[2]

print("train_set_y=" + str(train_set_y.shape)) #如果想要查看Y的格式,可以打印一下
print(train_set_y)   #如果想要查看Y的内容,可以打印一下
print(train_set_x_orig.shape) #通过查看train_set_x_orig的shape可以发现这个东西有4个维度分别是209 64 64 3。应该是209个64*64*3的图片
print('The number of the pictures in training set are ' + str(m_train))
print('The number of the pictures in testing set are ' + str(m_train))
print('The size of every picture is ' + str(mum_px) + '*' + str(mum_py) + '*3')

运行结果如下:
运行结果
我们可以看出在train_set_x_orig的shape中保存了,209个64* 64*3的图片。

5、为了方便处理,加快运算,我们不能将图片信息作为3个rgb矩阵进行运算,而应该将它保存成为209个64* 64*3维的向量,组成矩阵进行运算。

#我们通过.reshape(x,y)函数来进行降维,其中train_set_x_orig.shape[0]代表有209行,-1代表自动生成列数,应该是209个64*64*3列
train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T
test_set_x_flatten = test_set_x_orig.reshape(test_set_x_orig.shape[0],-1).T
#查看一下降维后矩阵的形式
print(train_set_x_flatten.shape)
print(test_set_x_flatten.shape)

结果如下:
在这里插入图片描述
我们可以看到转置后的矩阵每一列保存着原来的一张图片对应的64* 64*3的rgb矩阵内的元素。
6、为了表示彩色图像,必须为每个像素指定红色,绿色和蓝色通道(RGB),因此像素值实际上是从0到255范围内的三个数字的向量。机器学习中一个常见的预处理步骤是对数据集进行居中和标准化,这意味着可以减去每个示例中整个numpy数组的平均值,然后将每个示例除以整个numpy数组的标准偏差。但对于图片数据集,它更简单,更方便,几乎可以将数据集的每一行除以255(像素通道的最大值),因为在RGB中不存在比255大的数据,所以我们可以放心的除以255,让标准化的数据位于[0,1]之间,现在标准化我们的数据集:

train_set_x = train_set_x_flatten / 255
test_set_x = test_set_x_flatten / 255

——————————————————————————————————————————————————————————
这样我们需要准备的数据就已经准备完成啦,接下来就进行神经网络的搭建了。
——————————————————————————————————————————————————————————
二、建立神经网络

其大的步骤有三步:

定义模型结构(例如输入特征的数量)

初始化模型的参数

循环:

3.1 计算当前损失(正向传播)

3.2 计算当前梯度(反向传播)

3.3 更新参数(梯度下降)

1.构建sigmoid函数

def sigmoid(z):
    """
    参数:
            任意的标量或者numpy数组
    返回:        
            s = sigmoid(z)
    """
    
    s = 1 / (1 + np.exp(-z))
    
    return s

#测试sigmoi函数功能
print(str(sigmoid(0))) 
print(sigmoid(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值