采用logistic回归做二分类(第一个网络)_from lr_utils import load_dataset 下载-程序员宅基地

技术标签: python  logistic  吴恩达第二周编程作业  吴恩达深度学习课后习题  

在本文开始之前首先声明,本文参考Logistic Regression with a Neural Network mindset,我基于他的文章加以自己的理解发表这篇博客。


本文所用资料已上传百度云盘【点击下载】,请在开始之前将文件下载好,确保在python根目录下有lr_utils.py和数据集文件夹。


【python版本:3.6.4】


首先,将本次设计所要使用的几个库引用进来:

  • numpy:python进行科学计算常用的包
  • h5py:用于与H5文件中存储的数据集进行交互的包
  • matplotlib:一个用于python制图的著名的库
  • Ir_utils:基于H5py写的一个库,用于下载数据集中的数据
import numpy as np
import h5py
import matplotlib.pyplot as plt
from lr_utils import load_dataset

lr_utils.py库中代码如下,也可以自行打开查看:

import numpy as np
import h5py                                                            #h5py:Python与H5文件交互的库
    
    
def load_dataset():                                                    #定义下载函数
    train_dataset = h5py.File('datasets/train_catvnoncat.h5', "r")     #读取训练数据集
    train_set_x_orig = np.array(train_dataset["train_set_x"][:])       #读取训练数据集里面的图像数据
    train_set_y_orig = np.array(train_dataset["train_set_y"][:])       #读取训练数据集里面的图像对应的分类值(0/1)

    test_dataset = h5py.File('datasets/test_catvnoncat.h5', "r")       #读取测试数据集
    test_set_x_orig = np.array(test_dataset["test_set_x"][:])          #读取测试数据集里面的图像数据
    test_set_y_orig = np.array(test_dataset["test_set_y"][:])          #读取测试数据集里面的图像对应的分类值(0/1)

    classes = np.array(test_dataset["list_classes"][:])                #保存的是以Bytes类型保存的两个字符串数据集
                                                                       #数据为:【'non-cat','cat'】
    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

解释一下上面库中部分代码意思:

  • H5文件:类似于python中的字典,也是由键值组成;
  • h5py.File:用于读取H5文件的代码;
  • train_dataset [ “train_set_x”] [:]:读取键 “train_set_x” 下的所有数据作为训练数据集;
  • test_dataset [ “test_set_x”] [:]:读取键 “test_set_x” 下的所有数据作为测试数据集;
  • train_dataset [ “train_set_y”] [:]:读取键 “train_set_y” 下数据作为训练数据集的标签(0丨1);
  • test_dataset [ “test_set_y”] [:]:读取键 “test_set_y” 下数据作为测试数据集的标签(0丨1);
  • classes:保存的是以字节类型保存的两个字符串数据,数据为:[b'non-cat'b'cat'];
  • train_set_y_orig.reshape((1,train_set_y_orig.shape [0])):将train_set_y_orig矩阵重组为二维的1X209阶矩阵;
  • test_set_y_orig.reshape((1,test_set_y_orig.shape [0])):将test_set_y_orig矩阵重组为二维的1X50阶矩阵;

接下来我们将数据加载到主函数中:

train_set_x_orig , train_set_y , test_set_x_orig , test_set_y , classes = load_dataset()

首先我们需要知道:train_set_x_orig是一个维度为(m_ train,num_px,num_px,3)的数组(test和train的维度相同),train_set_y是一个维度为(1,m_ train)的数组。

m_train = train_set_y.shape[1]
### 训练样本数,也等于train_set_x_orig.shape[0] ###
m_test = test_set_y.shape[1]
### 测试样本数,也等于test_set_x_orig.shape[0] ###
num_px = train_set_x_orig.shape[1]
### 图片像素 ###

然后看一下我们加载的数据

print ("Number of training examples: m_train = " + str(m_train))
print ("Number of testing examples: m_test = " + str(m_test))
print ("Height/Width of each image: num_px = " + str(num_px))
print ("Each image is of size: (" + str(num_px) + ", " + str(num_px) + ", 3)")
print ("train_set_x shape: " + str(train_set_x_orig.shape))
print ("train_set_y shape: " + str(train_set_y.shape))
print ("test_set_x shape: " + str(test_set_x_orig.shape))
print ("test_set_y shape: " + str(test_set_y.shape))

运行结果:

Number of training examples: m_train = 209
Number of testing examples: m_test = 50
Height/Width of each image: num_px = 64
Each image is of size: (64, 64, 3)
train_set_x shape: (209, 64, 64, 3)
train_set_y shape: (1, 209)
test_set_x shape: (50, 64, 64, 3)
test_set_y shape: (1, 50)

我们已经知道一张图片是由64×64像素构成的,每个像素点是由三原色(R,G,B)组成的,所以要乘上如图3所示,这样一张图片可以表示为numpy的数组(64,64,3)中,为了方便,我们需要将维度降低,将其构成一个(64X64X3,1)的numpy数组。这样我们的训练集和测试集是一个numpy数组,每一列代表一个平坦的图像。

使用以下代码可以实现将维度为(a,b,c,d)的矩阵平铺为(b * c * d,a)的矩阵X_flatten。

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: " + str(train_set_x_flatten.shape))
print ("test_set_x_flatten shape: " + str(test_set_x_flatten.shape))

已经知道train_set_x_orig.shape [0]是图片数量,使用重塑就构成了209行,然后多少列我并不知道可以让电脑自己去算,直接采用-1,最后得出结果是12288列。再转置一下我们就可以得到一个12288行,209列的一个矩阵。

降维后的情况:

train_set_x_flatten shape: (12288, 209)
test_set_x_flatten shape: (12288, 50)

因为一个像素点的颜色是由RGB三个值来表现的,所以像素点矩阵对应三个颜色向量矩阵,其值为从0到255的范围内数字。在机器学习中对数据进行预处理最常见的步骤是特征缩放和均值归一化。

特征缩放:目的是为了让梯度下降运行的更快一点,为了将特征的取值约束在-1到1之间,我们可以用数据集除上极差(最大值与最小值之差)

均值归一化:将特征值变为平均值为0的特征值采用公式X_ {j} = \ frac {X_ {j} ^ {\ left(i \ right)}  -  \ mu} {S},其中\亩为数据集的平均值,S为极差。

对于图片数据集,数据集的每一行都直接除以255(像素通道的最大值),因为在RGB中不存在比255大的数据,所以我们可以放心的除以255,让标准化的数据位于[ 0,1]之间,现在标准化我们的数据集就可以得到最终数据处理后的数据集:

train_set_x = train_set_x_flatten / 255
### 对数据集进行居中和标准化 ###
test_set_x = test_set_x_flatten / 255
### 因为在RGB中不存在比255大的数据,可以放心除以像素通道的最大值 ###

数据加载完之后,我们可以看一下我们的数据集里面的图片以及处理后的数据是什么样子的。

### 标签数据 ###
print("train_set_y shape : " + str(train_set_y.shape))
print("train_set_y=" + str(train_set_y))
print("test_set_y shape : " + str(test_set_y.shape))
print("test_set_y=" + str(test_set_y))

train_set_y shape : (1, 209)
train_set_y=[[0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 1 0 1 0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a845414332/article/details/84025219

智能推荐

可编辑div contenteditable = “true“限制字数输入框_利用contenteditable实现textarea即支持tags标签也支持文本的实现方式-程序员宅基地

文章浏览阅读7.8k次,点赞6次,收藏9次。<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <style> .main { position: relative; ..._利用contenteditable实现textarea即支持tags标签也支持文本的实现方式

C#连接Access数据库,C#操作Access数据库-程序员宅基地

文章浏览阅读300次,点赞9次,收藏10次。C#连接Access数据库,C#操作Access数据库

系统平均负载(Load average)与CPU利用率_uptime load average 转换成cpu-程序员宅基地

文章浏览阅读3k次。在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。通过下面的几个部分的了解,可以一步一步的找出Load Averag_uptime load average 转换成cpu

商城购物系统软件测试,网上商城购物系统黑盒测试-程序员宅基地

文章浏览阅读5.3k次,点赞2次,收藏35次。《网上商城购物系统黑盒测试》由会员分享,可在线阅读,更多相关《网上商城购物系统黑盒测试(7页珍藏版)》请在人人文库网上搜索。1、网上商城购物系统黑盒测试一、目的和意义软件测试是软件工程中非常重要的环节,是软件质量的保证。该课程是培养训练学生软件质量保证能力的重要实践性教学环节,与软件测试技术课程的教学内容紧密配合,同步进行。通过软件测试的实践训练,深刻理解和掌握软件测试和软件测试过程的基本方法和基..._对指定电子商务网站的接受订单的网页创建功能测试,根据动态黑盒测试方法设计

2024年最新Python面试自我介绍范文,软件工程复习资料,腾讯开发面试题-程序员宅基地

文章浏览阅读612次,点赞8次,收藏11次。不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

运筹学经典问题_运筹学好玩的问题-程序员宅基地

文章浏览阅读4.5k次,点赞11次,收藏43次。构建知识体系中,有相同爱好的朋友一起加油呀。_运筹学好玩的问题

随便推点

php下连接mssql2005的代码_php7.1联接mssmql2005-程序员宅基地

文章浏览阅读511次。1.下载以下两个文件,放入php ext目录及system32 php_sqlsrv_52_ts_vc6.dll (线程安全) php_sqlsrv_52_nts_vc6.dll (非线程安全) vc6用于Apache,vc9用于IIS 2.修改php.ini extension=php_sqlsrv_52_ts_vc6.dll 3.下载sqlncli.msi,微软官方可以_php7.1联接mssmql2005

一些实际项目编写代码经验_实际项目代码-程序员宅基地

文章浏览阅读362次。1、gitreset--hardFETCH_HEAD2、gitpull就会成功。3、void imu_data::publish()其他线程和主线程一样,只有当强制要求退出时,才会去退出,SafeCloseThread(thread_deamon_, run_deamon_); 当然也可以控制休眠,一秒去执行一次,但是需要去主动退出,while循环,不然不会自己主动退出..._实际项目代码

C++联合体union用法实例详解_c++语言union和struct的运用例题-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏15次。转载自:http://www.jb51.net/article/66711.htm本文实例讲述了C++联合体union用法。分享给大家供大家参考。具体如下:我们应该按照C中的convention去使用union,这是我这篇文章要给出的观点。虽然C++使得我们可以扩展一些新的东西进去,但是,我建议你不要那样去做,看完这篇文章之后,我想你大概也是这么想的。  C由于没有类的概念,所有类型其实都可以看作..._c++语言union和struct的运用例题

matlab 调用hfss时报错。警告: HFSS Execution returned an error status !_hfss an error-程序员宅基地

文章浏览阅读562次。按照网上常说的在hfssExePath路径处添加双引号,但是还是有这个错误。生成的VBS文件用hfss单独打开是没问题的,有大佬知道这个怎么解决吗。_hfss an error

磁盘空间不足怎么清理?记好这3招!_电脑硬盘空间太少如何清理大文件 csdn-程序员宅基地

文章浏览阅读247次。随着电脑使用时间的变长,磁盘空间可能会逐渐减少。磁盘空间不足怎么清理呢?小编总结了几个简单有效的方法,有需要的朋友快来试试吧。如果担心清理过程误删文件,也可以这样恢复!_电脑硬盘空间太少如何清理大文件 csdn

ETCD背后的Raft一致性算法原理_etcd 强一致性原理 prepare commit-程序员宅基地

文章浏览阅读945次。项目中使用ETCD来实现服务发现和配置信息的存储,最近我抽空研究了一下ETCD和背后的一致性算法 — Raft算法的逻辑。ETCD是什么ETCD是一个go语言实现的高可靠的KV存储系统,支持HTTP协议的PUT/GET/DELETE操作; 为了支持服务注册与发现,支持WATCH接口(通过http long poll实现); 支持KEY持有TTL属性; CAS(compare and ..._etcd 强一致性原理 prepare commit

推荐文章

热门文章

相关标签