1.二分类
二分类就是输出只有{0,1}两个离散值,以图像处理问题为例。一般来说,彩色图片包含RGB三个通道。假设一个图片的尺寸是(64, 64, 3),那么神经网络的输入X的维度就是64*64*3=12288。如果训练样本共有m张图片,那么整个训练样本的维度是(12288,m)。
2.Logistic Regression
逻辑回归的线性预测输出:
逻辑回归的非线性预测输出:
Logistic逻辑回归的凸损失函数表示为:
m个样本的损失函数为:
3.梯度下降
4.导数
5.计算图
整个神经网络的训练过程实际包含了两个过程:正向传播和反向传播。正向传播是从输入到输出,由神经网络计算出预测值;反向传播是从输出到输入,对参数w和b计算梯度的过程。
6.计算图的导数计算
链式法则
7.Logistic回归的梯度下降算法
梯度下降算法可表示为:
m个样本的梯度表达式:
8.向量化
向量化可以节省大量运行时间:
import time
a = np.random.rand(10000000)
b = np.random.rand(10000000)
tic = time.time()
c = np.dot(a, b)
toc = time.time()
print(c)
print("Vectorized version:" + str(1000*(toc - tic)) + "ms")
c = 0
tic = time.time()
for i in range(10000000):
c += a[i]*b[i]
toc = time.time()
print(c)
print("For loop:" + str(1000*(toc - tic)) + "ms")
9.向量化logistic回归的梯度输出
Logistic回归损失函数:
反向传播,计算损失函数对参数w和b的偏导数(链式法则):
经过每次迭代后,更新参数w和b:
10.python中的广播
神经网络中一般用到python广播的是:z=wx+b在加参数b的时候会吧b扩展成一个和wx对应的矩阵。
例子:
import numpy as np
A = np.array([[56.0, 0.0, 4.4, 68.0],
[1.2, 104.0, 52.0, 8.0],
[1.8, 135.0, 99.0, 0.9]])
print(A)
cal = A.sum(axis=0)
print(cal)
percentage = 100*A/cal.reshape(1, 4)
print(percentage)
11.python/numpy中容易出现bug的点
不要使用a = np.random.randn(5)表示秩为1的矩阵形状不确定,可以使用a = np.random.randn(5,1)或a = np.random.randn(1,5)来确定矩阵的形状。同时,也可以使用reshape方法或者assert()声明来确定矩阵的形状,例如:assert(a.shape == (5,1))。
例子:
import numpy as np
a = np.random.randn(5)
print(a)
print(a.shape)
print(a.T)
print(np.dot(a,a.T))
a = np.random.randn(5,1)
print(a)
print(a.T)
print(np.dot(a,a.T))
12.Logistic回归cost function推导