自学内容网 自学内容网

✨机器学习笔记(五)—— 神经网络,前向传播,TensorFlow

Course2-Week1:
https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week1

1️⃣神经网络(Neural Network)

🎈神经网络是模仿大脑的神经元之间传递的一个过程,如下图:

左图中, 神经网络模拟生物上神经元的传递,将数据输入神经元后将输出作为电信号传递给下一个神经元。右图中,展示了一个简单的神经元模型,即一个简单的神经网络,后一个神经元将前一个神经元的输出视为自己的输入,最终得出一个结果输出。

在这里插入图片描述

🎈那这种神经网络的结构有何作用呢?面向怎样的需求情况呢,首先对于一个最简单的分类逻辑回归问题(判断衣服是否畅销),可以用一个神经元来完成,将价格 p r i c e price price 视为这个神经元的输入,将 s i g m o i d sigmoid sigmoid 作为神经元的激活函数(用于输出结果的函数),最后输出衣服畅销的概率是多少,这是一个最简单的神经网络,也可以称为单层感知机

在这里插入图片描述

对于一个稍微复杂的问题,我们需要将价格、运费、营销、材质作为输入,过个一个有三个神经元的神经网络层,输出三个值(1个神经元输出一个值):负担能力、意识、感知质量,最后是通过这三个值来预测畅销的概率,这就是运用神经网络的典型案例。网络中的每一层都有名字,最开始作为输入数据的这层为输入层(input layer),最终输出结果的这层为输出层(output layer),由于我们在模型中只关心输入和输出,不是很关心中间的过程,所以中间的层次被称为隐藏层(hidden layer)

在这里插入图片描述

🎈Multiple hidden layers(multilayer perceptron 多层感知机)

在这里插入图片描述

🎈Face recognition

在这里插入图片描述

🎈Car classification

在这里插入图片描述


✨神经网络层的工作原理

对于: a j [ l ] = g ( w ⃗ j [ l ] ⋅ a ⃗ [ l − 1 ] + b j [ l ] ) 对于:a_j^{[l]}=g(\vec w_j^{[l]} \cdot \vec a^{[l-1]}+b_j^{[l]}) 对于:aj[l]=g(w j[l]a [l1]+bj[l])

  1. a j [ l ] a_j^{[l]} aj[l]— Activation value of layer l l l, unit(neuron) j j j ;
  2. g ( z ) g(z) g(z) — actibation function(sigmoid) ;
  3. w ⃗ j [ l ] , b j [ l ] \vec w_j^{[l]},b_j^{[l]} w j[l],bj[l] — Parameter w & b of layer l l l, unit j j j ;
  4. a ⃗ [ l − 1 ] \vec a^{[l-1]} a [l1] — output of layer l − 1 l-1 l1 (previous layer)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2️⃣前向传播(Forward propagation)

🎈从输入层开始,然后进行前向传播给隐藏层并计算隐藏层的激活项,然后继续前向传播并计算输出层的激活项得出预测结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Tensorflow Code

在这里插入图片描述

✨前向传播的代码实现

在这里插入图片描述

3️⃣用 TensorFlow 搭建神经网络

在这里插入图片描述

4️⃣徒手搭建神经网络

def my_dense(a_in, W, b, g):
    """
    Computes dense layer
    Args:
      a_in (ndarray (n, )) : Data, 1 example 
      W    (ndarray (n,j)) : Weight matrix, n features per unit, j units
      b    (ndarray (j, )) : bias vector, j units  
      g    activation function (e.g. sigmoid, relu..)
    Returns
      a_out (ndarray (j,))  : j units|
    """
    units = W.shape[1]
    a_out = np.zeros(units)
    for j in range(units):               
        w = W[:,j]                                    
        z = np.dot(w, a_in) + b[j]         
        a_out[j] = g(z)               
    return(a_out)



def my_sequential(x, W1, b1, W2, b2):
    a1 = my_dense(x,  W1, b1, sigmoid)
    a2 = my_dense(a1, W2, b2, sigmoid)
    return(a2)



def my_predict(X, W1, b1, W2, b2):
    m = X.shape[0]
    p = np.zeros((m,1))
    for i in range(m):
        p[i,0] = my_sequential(X[i], W1, b1, W2, b2)
    return(p)
    

原文地址:https://blog.csdn.net/qq_53569667/article/details/142394720

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!