【CS231n笔记】神经网络基础

了解线性分类和神经网络在实现上的区别

     区别于线性score函数

     (之前)线性得分函数:

在这里插入图片描述

     (现在)2层的神经网络

        这是最简单的神经网络形式
在这里插入图片描述

      是将两个变化相结合,顶层有一个线性变换,然后同另一个非线性变换结合而成。

         模型图
【CS231n笔记】神经网络基础_第1张图片

     ()3层的神经网络

在这里插入图片描述

     ()n层神经网络

在这里插入图片描述


神经网络

    概念:神经网络就是由简单函数构成的一组函数,在顶层使用一种层次化的方式将它们堆叠在一起,来形成一个更复杂的非线性的函数。是一个多阶层分布计算的思想。

    说明:在线性分类中,只有一个根据颜色特征来分类的权值W,而在多层的网络中,W1直接和输入X相联,表示各种类别的集合,存在一个中间变量h,在h里对这些模板都有相应的得分,W2是h里所有向量的权重,其上面的另一层再将这些得分组合起来,得到S最终得分。此时既有基于颜色的分类,也有了基于样式的分类。

        例子解释:若输入的图像x是左侧脸的马,而W1中的类别既有左侧脸的马,又有右侧脸的马,则在h中,可能左侧脸的马得分很高,右侧脸的马得分低,那么W2是一个加权数而不是最大数,是所有类别得分的加权。如果某一分类得分较高,或在其他分类的得分较低或中等水平时,这些组合在一起可能会给出一个较高的分数及通过一个加权过程确保任意一匹吗的得分在马类中是较高的。

如果某一分类得分较高,或在其他分类的得分较低或中等水平时,这些组合在一起可能会给出一个较高的分数。

    组成

        神经元

                在连接和处理方式上类似人体中的神经元,故得名。

【CS231n笔记】神经网络基础_第2张图片


def neuron_tick(inputs):
    # 假设输入inputs和权重weights都是 1×n 的numpy矩阵
    # 偏差量bias假设是一个
    
    cell_body_sum = np.sum(inputs * self.weights) + self.bias
    firing_rate = 1.0 / (1.0 + math.exp(-cell_body_sum))   # sigmoid activation function
    return firing_rate  # 神经元的触发率

关于激活函数

视具体情况进行选择,先留个坑,以后要补~~

【CS231n笔记】神经网络基础_第3张图片

    架构

【CS231n笔记】神经网络基础_第4张图片

    实现代码

二层神经网络的构建▼

import numpy as np
from numpy.random import randn

N, D_in, H, D_out = 64, 1000, 100, 10
x, y = randn(N, D_in), randn(N, D_out)
w1, w2 = randn(D_in, H), randn(H, D_out)

for t in range(2000):
    h = 1 / (1 + np.exp(-x.dot(w1))
    y_pred = h.dot(w2)
    loss = np.square(y_pred - y).sum()
    print(t, loss)
    
    grad_y_pred = 2.0 * (y_pred - y)
    grad_w2 = h.T.dot(grad_y_pred)
    grad_h = grad_y_pred.dot(w2.T)
    grad_w1 = x.T.dot(grad_h * h * (1 - h))
    
    W1 -= 1e-4 * grad_w1
    W2 -= 1e-4 * grad_w2

    实现代码

三层神经网络的简要表达▼

# ...

f = lambda x:1.0 / (1.0 + np.exp(-x)
x = np.random.randn(3,1)
h1 = f(np.dot(W1,x) + b1)
h2 = f(np.dot(W2,h1) + b2)
out = np.dou(w3,h2) + b3

你可能感兴趣的:(深度学习)