15天共读深度学习Day4

版权声明:感谢阅读,欢迎批评指正。 https://blog.csdn.net/skyejy/article/details/89519332

(前几天都是用的有道云笔记,突然觉得用博客记录也比较好呀)

今日导读:

1.三层神经网络的实现

# coding: utf-8
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def identity_function(x):
    return x

def init_network():
    network = {}
    network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
    network['b1'] = np.array([0.1, 0.2, 0.3])
    network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]])
    network['b2'] = np.array([0.1, 0.2])
    network['W3'] = np.array([[0.1, 0.3], [0.2, 0.4]])
    network['b3'] = np.array([0.1, 0.2])

    return network

def forward(network, x):
    W1, W2, W3 = network['W1'], network['W2'], network['W3']
    b1, b2, b3 = network['b1'], network['b2'], network['b3']

    a1 = np.dot(x, W1) + b1
    z1 = sigmoid(a1)
    a2 = np.dot(z1, W2) + b2
    z2 = sigmoid(a2)
    a3 = np.dot(z2, W3) + b3
    y = identity_function(a3)

    return y

network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)

2.为什么分类问题的输出层的激活函数用softmax函数?

首先,什么是分类问题?

机器学习的问题大致可以分为 分类问题 和 回归问题

分类问题是数据属于哪一个类别的问题

而回归问题是根据某个输入预测一个(连续的)数值问题

恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直接输出。因此,在输出层使用恒等函数时,输入信号会原封不动地被输出。

恒等函数:

softmax 函数:

图中,softmax 函数的输出通过箭头与所有的输入信号相连。这是因为,从下式可以看出,输出层的各个神经元都受到所有输入信号的影响

exp(x) 是表示 ex 的指数函数(e 是纳皮尔常数 2.7182 ...)。上式表示假设输出层共有 n 个神经元,计算第 k 个神经元的输出 yk。如式所示,softmax 函数的分子是输入信号 ak 的指数函数,分母是所有输入信号的指数函数的和。

softmax 函数的输出是 0.0 到 1.0 之间的实数。并且,softmax 函数的输出值的总和是 1。输出总和为 1 是 softmax 函数的一个重要性质。正因为有了这个性质,我们才可以把 softmax 函数的输出解释为“概率”。这里需要注意的是,即便使用了 softmax 函数,各个元素之间的大小关系也不会改变。这是因为指数函数(y = exp(x))是单调递增函数。

3.MNIST数据集包含什么样的数据集?

MNIST 是机器学习领域最有名的数据集之一,被应用于从简单的实验到发表的论文研究等各种场合。实际上,在阅读图像识别或机器学习的论文时,MNIST 数据集经常作为实验用的数据出现。

MNIST 数据集来自美国国家标准与技术研究所,National Institute of Standards and Technology (NIST).。训练集 (training set) 由来自 250 个不同人手写的数字构成,,其中 50% 是高中学生,,50% 来自人口普查局 (the Census Bureau) 的工作人员.。测试集(test set) 也是同样比例的手写数字数据。

MNIST 数据集是由 0 到 9 的数字图像构成的。训练图像有 6 万张,测试图像有 1 万张,这些图像可以用于学习和推理。MNIST 数据集的一般使用方法是,先用训练图像进行学习,再用学习到的模型度量能在多大程度上对测试图像进行正确的分类。

MNIST 的图像数据是 28 像素 × 28 像素的灰度图像(1 通道),各个像素的取值在 0 到 255 之间。每个图像数据都相应地标有“7”“2”“1”等标签。

4.为什么手写数字图像分类时,要对数据采用批处理?

批处理前:输入一个由 784 个元素(原本是一个 28 × 28 的二维数组)构成的一维数组后,输出一个有 10 个元素的一维数组。这是只输入一张图像数据时的处理流程。

批处理后:考虑打包输入多张图像的情形。比如,我们想用 predict() 函数一次性打包处理 100 张图像。为此,可以把 x 的形状改为 100 × 784,将 100 张图像打包作为输入数据。用图表示如下:

输入数据的形状为 100 × 784,输出数据的形状为 100 × 10。这表示输入的 100 张图像的结果被一次性输出了。比如,x[0] 和 y[0] 中保存了第 0 张图像及其推理结果,x[1] 和 y[1] 中保存了第 1 张图像及其推理结果,等等。

这种打包式的输入数据称为批(batch)。批有“捆”的意思,图像就如同纸币一样扎成一捆。

批处理对计算机的运算大有利处,可以大幅缩短每张图像的处理时间。

那么为什么批处理可以缩短处理时间呢?

这是因为大多数处理数值计算的库都进行了能够高效处理大型数组运算的最优化。并且,在神经网络的运算中,当数据传送成为瓶颈时,批处理可以减轻数据总线的负荷(严格地讲,相对于数据读入,可以将更多的时间用在计算上)。也就是说,批处理一次性计算大型数组要比分开逐步计算各个小型数组速度更快。
 

猜你喜欢

转载自blog.csdn.net/skyejy/article/details/89519332