神经网络构架:主要时表示神经网络的组成,即中间隐藏层的结构

对图片进行说明:我们可以看出图中的层数分布:

    input layer表示输入层,维度(N_num, input_dim)  N_num表示输入层的样本个数, input_dim表示输入层的维度, 即变量的个数

     hidden layer1 表示第一个隐藏层,维度(input_dim, hidden_dim1input_dim表示输入层的维度,hidden_dim1示隐藏层的维度

     hidden layer2 表示第二个隐藏层,维度(hidden_dim1, num_classes) hidden_dim1表示隐藏层的维度, num_classes表示输出的样本的类别数

     output layer 表示输出结果层, 维度(N_num, num_classes) N_num 表示输入层的样本个数, num_classes表示类别数,即每个样本对于的类别得分值

代码:对于隐藏层的参数w和b的初始化

        self.params['W1'] = weight_scale * np.random.randn(input_dim, hidden_dim)     
        self.params['b1'] = np.zeros((1, hidden_dim))    
        self.params['W2'] = weight_scale * np.random.randn(hidden_dim, num_classes)  
        self.params['b2'] = np.zeros((1, num_classes))

 

深度学习原理与框架-神经网络架构  1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差)  4.dropout(防止过拟合操作)

2.激活函数讨论, 加入激活函数的目的是为了在分类过程中,使得分类的判别式是非线性的方程即: f = σ(w*x+b) , σ表示非线性激活函数

深度学习原理与框架-神经网络架构  1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差)  4.dropout(防止过拟合操作)

但是对于sigmoid激活函数存在一个问题,即在进行梯度回传时,存在一个问题,即容易发生梯度消失的问题, (1-σ(x)) * σ(x) σ(x) 表示经过sigmoid变化后的输入结果

当x值较大时, dσ / dx 的梯度值较小,即根据链式法则,每次都乘以较小的梯度值,因此到最后就容易出现梯度消失的情况

深度学习原理与框架-神经网络架构  1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差)  4.dropout(防止过拟合操作)

对于ReLU激活函数的梯度回传,进行求导时,当输入值X小于0时,回传值为0, 当输入值大于等于0时,回传值即是本身,因此激活函数本身不会造成梯度消失问题

代码:

x = cache
dout[x < 0] = 0

3. 数据预处理, 即对输入的图片,对每张图片减去均值,在除以标准差的操作

深度学习原理与框架-神经网络架构  1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差)  4.dropout(防止过拟合操作)

代码:

   # 对图片做平均操作
    mean_img = np.mean(X_train, axis=0, keepdims=True)

    X_train -= mean_img
    X_val -= mean_img
    X_test -= mean_img

4. dropout,关闭中间的几个隐藏层表示不进行参数的更新操作

深度学习原理与框架-神经网络架构  1.神经网络构架 2.激活函数(sigmoid和relu) 3.图片预处理(减去均值和除标准差)  4.dropout(防止过拟合操作)