具有神经网络思维的Logistic回归课后作业

具有神经网络思维的Logistic回归课后作业

前期准备:

  1. 下载吴恩达给的资料。该资料中应该包含 lr_utils.py 文件和datasets文件夹。注意lr_utils.py文件和datasets文件夹都应该与主要代码在同一级的文件夹下且同一级目录下。
    在这里插入图片描述

实验过程

第一步:导入库

import numpy as np
import matplotlib.pyplot as plt
import h5py
from lr_utils import load_dataset

最后一句中的lr_utils 和load_dataset 都是下载的吴恩达老师的内容,只要从网上下载下来之后放到前面所说的指定位置即可。

第二步:前期实验

一、导入数据进入主程序
train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()
  • train_set_x_orig :保存的是训练集里面的图像数据(本训练集有209张64x64的图像)。
  • train_set_y_orig :保存的是训练集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)。
  • test_set_x_orig :保存的是测试集里面的图像数据(本训练集有50张64x64的图像)。
  • test_set_y_orig : 保存的是测试集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)。
  • classes : 保存的是以bytes类型保存的两个字符串数据,数据为:[b’non-cat’ b’cat’]。
二、打开datasets文件夹中的测试图片
plt.imshow(train_set_x_orig[25])
plt.waitforbuttonpress()

只用plt.imshow()函数无法打开测试图片,需要加上下面的plt.waitforbuttonpress()函数

三、打印测试集和训练集中的图片信息
m_train = train_set_y.shape[1] #训练集里图片的数量。
m_test = test_set_y.shape[1] #测试集里图片的数量。
num_px = train_set_x_orig.shape[1] #训练、测试集里面的图片的宽度和高度(均为64x64)

shape[0]:表示矩阵的行数
shape[1]:表示矩阵的列数
因为 train_set_y.shape 保存的是训练集的图像对应的分类值(【0 | 1】,0表示不是猫,1表示是猫)是由一维数组保存的,所以train_set_y.shape[1]可以用列数来计算图片的数量。同理test_set_y.shape[1]也用列数来计算测试集中的图片数量。

  • 问题:为什么train_set_x_orig.shape[1] 可以表示图片的长宽,而把代码改成train_set_x_orig.shape[0]之后则输出的是图片的数量209。
  • 解答:train_set_x_orig 是一个维度为(m_​​train,num_px,num_px,3)的数组,train_set_x_orig.shape[0]是数组中的m_train项,代表的是训练集里的图片数量,train_set_x_orig.shape[1]是数组中的num_px项,代表的是训练、测试集中的图片宽度和高度。

打印数据集和训练集中的图片数据:

print ("训练集的数量: m_train = " + str(m_train))
print ("测试集的数量 : m_test = " + str(m_test))
print ("每张图片的宽/高 : num_px = " + str(num_px))
print ("每张图片的大小 : (" + str(num_px) + ", " + str(num_px) + ", 3)")
print ("训练集_图片的维数 : " + str(train_set_x_orig.shape))
print ("训练集_标签的维数 : " + str(train_set_y.shape))
print ("测试集_图片的维数: " + str(test_set_x_orig.shape))
print ("测试集_标签的维数: " + str(test_set_y.shape))

输出结果:
在这里插入图片描述

四、降维

  • 将(64,64,3)的numpy数组降维成(64x64x3 ,1) 之所以可以写成64x64x3的形式,是因为每个图片是由64x64个像素点组成,每个像素点由(R,G,B)原色构成。

  • 降维代码:

#X_flatten = X.reshape(X.shape [0],-1).T #X.T是X的转置
#将训练集的维度降低并转置。
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
  • 降维解释: 降维是指在某些限定条件下,降低随机变量个数,得到一组“不相关”主变量的过程。 降维可进一步细分为变量选择和特征提取两大方法。(这个地方就把保存图片的三维数组转化成了一维数组)
  • reshape函数: 这个函数的作用是在不改变数据内容的情况下,改变一个数组的格式。列如把3行4列数组改成2行6列数组,a = a.reshape((2,6))
  • train_set_x_orig.reshape(train_set_x_orig.shape[0],-1).T: 这行代码中train_set_x_orig.shape[0]的值是50,可是为啥是50,-1是什么意思?

五、数学表达式

z ( i ) = w T x ( i ) + b z^{(i)}=w^{T}x^{(i)}+b z(i)=wTx(i)+b
y ^ ( i ) = a ( i ) = s i g m o i d ( z ( i ) ) \hat{y}^{(i)}=a^{(i)}=sigmoid(z^{(i)}) y^(i)=a(i)=sigmoid(z(i))
L ( a ( i ) , y ( i ) ) = − y ( i ) l o g ( a ( i ) ) − ( 1 − y ( i ) ) l o g ( 1 − a ( i ) ) L(a^{(i)},y^{(i)})=-y^{(i)}log(a^{(i)})-(1-y^{(i)})log(1-a^{(i)}) L(a(i),y(i))=y(i)log(a(i))(1y(i))log(1a(i))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值