碎碎念:达叔说 逻辑回归相当于小型的神经网络 就是没有隐含层嘛
先简单介绍一下需要做的事情 共分为7步,接下来将达叔作业里的所有程序 粘贴出来
1.,导入数据集,查看数据格式
操作:train_set_x_orig, train_set_y, test_set_x_orig, test_set_y, classes = load_dataset()
train_set_x_orig.shape
一般会得到四个值(n,num_px,num_px,3) n 是训练集的个数,如 100张猫咪的训练照片, num_px 是图片的长宽?比如 64,64 代表一张64×64的图片 3 代表 RGB三个值
2.reshape
操作:train_set_x_flatten = train_set_x_orig.reshape(train_set_x_orig.shape[0], -1).T
X_flatten=X.shape(X.shape[0],-1).T 此操作可以将(a,b,c,d)的矩阵转化为(b*c*d,a)的二维矩阵
将(n,num_px,num_px,3)维度的数据reshape成(num_px×num_px×3,n)样子的数据,如(12288,n)12288行,n列。每一列是一张图片,每张图片有12288个特征。n代表 共有n张图片。这样所有训练集的维度就是一样的了
同时不要忘记对测试集也进行相同的操作
3.预处理(归一化)
操作:train_set_x = train_set_x_flatten/255.
一般来说 预处理包含center 去中心化和standardize标准化两步,但是因为这里每个12288个值,其实每一值代表图片上64×64个点中的RGB中的一个值,所以每个值得范围是(0,255)。所以每个值除以255就ok了
4.初始化参数
操作:w = np.zeros((dim, 1))
b = 0
一般来说有多少个输入特征,行数 这里是12288 一般就有多少个w
5.代价函数最小化(利用梯度下降法)
参考公式
操作: m = X.shape[1]
A = sigmoid(np.dot(w.T, X) + b) # compute activation 因为w是一个与X的行数一样&#x