【神经网络与TensorFlow】吴恩达机器学习笔记EP5(P42-P50)
从今天开始我将学习吴恩达教授的机器学习视频,下面是课程的连接1.1 欢迎来到机器学习!_哔哩哔哩_bilibili。一共有142个视频,争取都学习完成吧。
神经元和大脑
参考大脑去构建机器学习中的神经元。
简易地说,输入数据经过神经元,得到输出。
如下图所示,数据量和大的神经网络结合就会有高的性能表现。
需求预测
在具体例子当中,比如需求预测问题中,我们还是利用logistic回归作为模型,在神经元中将它称为激活函数。
如下图,在简单的单需求问题中,简答构建了单个神经元。
多个神经元可以组合成一个层。多个特征可以组成向量作为输入层的输入。
在输入层输入相同或相似的特征,经过中间由多个神经元构成的层(中间的层称为隐藏层)得到a向量,最后a向量经过输出层输出最终的结果。
隐藏层可以有多个
如下图,隐藏层可以有多个,实际上目前做的好的模型拥有几十甚至上百个隐藏层。
神经网络在图像中的应用
这里举一个神经网络的应用例子。神经网络在图像处理中的应用。下面是一个脸部识别的案例。
图片是一个含有较多参数的矩阵。将矩阵拉直成一个向量输入到神经网络当中作为输入。
然后经过若干个层,比如用第一个隐藏层看相对较小的窗口寻找边缘。然后后面的若干层分别依次去看更大的窗口。
神经网络中的层
每一个神经元中都是一个函数或者说模型,这里以logistic回归为例。
先给隐藏层中的参数做个定义,在参数前面加角标[n],说明这个参数是来自第n个隐藏层的。
如下图神经元中激活函数a的定义就是将当前层的权值向量w与输入的特征向量x点乘然后加上对应的b值参数。
神经网络中前一层的输出是后一层的输入。
在神经网络的输出层后加一个判断模块可以进行分类任务。
更复杂的神经网络
多个隐藏层组成了更为复杂的神经网络。
这里说明中间的隐藏层的激活函数a的计算方式,就是用当前层的权值向量w和前一层的输出向量a点乘,然后加上当前层的b值。
推理:做出预测(前向传播)
如下图是一个手写数字识别的案例。
前向传播就是从输入向量x计算到后面的向量a[1]、向量a[2]、向量a[3]的过程。
一般来说,越接近输出层,隐藏层中的神经元就越少。
前向传播就是推理的过程。也就是如果有别人训练好的神经网络和对应的权重等参数,我们就可以拿来推理自己的数据。
利用TensorFlow构建模型
下面是用tensorflow框架构建模型的实现方式。
构建一个隐藏层:
x = np.array([[200.0, 17.0]])
layer_1 = Dense(units=3, activation='sigmoid')
a1 = layer_1(x)
再加一个隐藏层:
layer_2 = Dense(units=1, activation='sigmoid')
a2 = layer_2(a1)
下面是在神经网络后面加上条件判断的代码:
yhat = np.zeros_like(predictions)
for i in range(len(predictions)):
if predictions[i] >= 0.5:
yhat[i] = 1
else:
yhat[i] = 0
print(f"decisions = \n{yhat}")
TensorFlow中的数据
下图是关于TensorFlow中的数据写法,下图是numpy的矩阵写法:
TensorFlow中使用张量,张量可以理解为更一般的矩阵。