本文是基于吴恩达老师的《深度学习》第一课第二周课后题所做,目的是使用逻辑回归算法来对小喵图片进行识别。在创建模型时主要包括:数据处理、模型搭建、模型测试、参数调整、模型应用等五个步骤,下面分别详述。
一、数据处理
为了简化流程,吴恩达老师已经给出了训练集和测试集数据以.h5格式给出(.h5格式是使用h5py库生产数据文件类型),数据文件链接为:https://pan.baidu.com/s/1KZks2c1TkIxtaWJrBtrYYQ,密码:i1l0,处理完成后会返回5个矩阵分别为:训练集X矩阵(train_set_x_orig), 训练集Y矩阵(train_set_y_orig ),测试集X矩阵(test_set_x_orig),测试集Y矩阵(test_set_y_orig),类别( classes:喵与非喵)
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"][:]) # your train set features
train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels
test_dataset = h5py.File('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
此处所使用的numpy和h5py 库都是比较经典的库,在此不多介绍。
此时得到的样本数量为209个,每个样本是3通道(RGB)图片生产的数组,大小为64*64*3,这种3维数组不便于处理需转化成 2维数组,且每一列代表一个样本数据,因此我们进行flatten、转置和均值化处理。
train_set_x_flatten = train_set_x_orig.reshape(m_train,num_px**2*3).T
test_set_x_flatten = test_set_x_orig.reshape(m_test,-1).T
train_set_x = train_set_x_flatten / 255
test_set_x = test_set_x_flatten / 255
当然,我们对数据只做了简单的处理,还有许多数据处理手段可以应用以提高算法的准确性和鲁棒性。
二、模型搭建
接下来可以把逻辑回归算法分解成多个函数进行实现。
(1)激励函数,采用经典的sigmoid函数
def sigmoid(z):
s = 1.0 / (1.0 + np.exp(-z))
return s
(2)初始化函数,初始化w和b。建议在python程序中多使用assert函数对数组的shape进行判断,以减少错误的发生。
def initialize_with_zeros(dim):
w = np.zeros((dim,1))
b = 0
assert(w.shape == (dim,1))
assert(isinstance(b,float) or isinstance(b,int))
return w,b
(3)传播函数,用于计算梯度下降法中的两个重要参数dw和db,及代价函数(Cost Function),根据逻辑回归算法我们采用的代价函数为:J(w,b)=1m∑