• Python深度学习02:神经网络的数学基础


    2.1 初始神经网络

    MNIST数据集:手写数字的灰度图像(28 像素×28 像素),包含 60 000 张训练图像和 10 000 张测试图像。

    类:分类问题中的某个类别叫作类(class)

    样本:数据点叫作样本(sample)

    标签:某个样本对应的类叫作标签(label)

    损失函数(loss function):网络如何衡量在训练数据上的性能,即网络如何朝着正确的方向前进。
    优化器(optimizer):基于训练数据和损失函数来更新网络的机制。
    在训练和测试过程中需要监控的指标(metric):本例只关心精度,即正确分类的图像所占的比例

    使用 Keras 库,加载数据集,代码如下:

     1 from keras.datasets import mnist
     2 from keras import models
     3 from keras import layers
     4 from keras.utils import to_categorical
     5 
     6 # 加载 Keras 中的 MNIST 数据集
     7 (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
     8 
     9 #标签
    10 train_labels = to_categorical(train_labels)
    11 test_labels = to_categorical(test_labels)
    12 
    13 #准备图像数据
    14 train_images = train_images.reshape((60000, 28 * 28))
    15 train_images = train_images.astype('float32') / 255
    16 test_images = test_images.reshape((10000, 28 * 28))
    17 test_images = test_images.astype('float32') / 255
    18 
    19 #构建网络模型
    20 network = models.Sequential()
    21 network.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
    22 network.add(layers.Dense(10, activation='softmax'))
    23 
    24 #编译的三个参数
    25 network.compile(optimizer='rmsprop',
    26 loss='categorical_crossentropy',
    27 metrics=['accuracy'])
    28 
    29 #拟合模型
    30 network.fit(train_images, train_labels, epochs=5, batch_size=128)
    31 
    32 #查看测试集性能
    33 test_loss, test_acc = network.evaluate(test_images, test_labels)

    2.2 神经网络的数据表示

    张量:当前所有机器学习系统都使用张量作为基本数据结构,张量的维度(dimension)通常叫作轴(axis)。

    标量(0D 张量):仅包含一个数字的张量叫作标量(scalar)

    1 import numpy as np
    2 x = np.array(12)
    3 x
    4 
    5 array(12)
    6 
    7 x.ndim
    8 
    9 0

    向量(1D 张量):数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。

    1 x = np.array([12, 3, 6, 14, 7])
    2 x
    3 
    4 array([12, 3, 6, 14, 7])
    5 
    6 x.ndim
    7 
    8 1

    注:这个向量有 5 个元素,所以被称为 5D 向量。5D 向量只有一个轴,沿着轴有 5 个维度。

            5D 张量有 5 个轴(沿着每个轴可能有任意个维度)。

    矩阵(2D 张量):向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。矩阵有 2 个轴(通常叫作行和列)。

    1 x = np.array([[5, 78, 2, 34, 0],
    2 [6, 79, 3, 35, 1],
    3 [7, 80, 4, 36, 2]])
    4 
    5 x.ndim
    6 
    7 2

    注:[5, 78, 2, 34, 0] 是 x 的第一行, [5, 6, 7] 是第一列。

    3D 张量与更高维张量:可以将其直观地理解为数字组成的立方体。

     1 x = np.array([[[5, 78, 2, 34, 0],
     2 [6, 79, 3, 35, 1],
     3 [7, 80, 4, 36, 2]],
     4 [[5, 78, 2, 34, 0],
     5 [6, 79, 3, 35, 1],
     6 [7, 80, 4, 36, 2]],
     7 [[5, 78, 2, 34, 0],
     8 [6, 79, 3, 35, 1],
     9 [7, 80, 4, 36, 2]]])
    10 
    11 x.ndim
    12 3

    张量的关键属性:

    形状:整数元组,表示张量沿每个轴的维度大小(元素个数)。

    前面矩阵示例的形状为 (3, 5) ,3D 张量示例的形状为 (3, 3, 5) 。向量的形状只包含一个元素,比如 (5,) ,而标量的形状为空,即 () 。

    数据类型:(在 Python 库中通常叫作 dtype ),张量的类型可以是 float32 、 uint8 、 float64 等。

    切片:可以沿着每个张量轴在任意两个索引之间进行选择。

    1 #所有图像的右下角选出 14 像素×14 像素的区域
    2 my_slice = train_images[:, 14:, 14:]

    2.3 神经网络的‘齿轮’:张量运算

    点积

    两个向量的点积:对应维度的元素相乘,再相加,结果是一个标量。

    注:只有元素个数相同的向量之间才能做点积。

    1 import numpy as np
    2 
    3 x = np.array([1,2,3])
    4 y = np.array([4,5,6])
    5 z = x.dot(y)
    6 z
    7 
    8 32

    计算过程:1*4+2*5+3*6=32

    矩阵与向量的点积,返回一个向量。

    注:“矩阵点积向量”的结果与“向量点积矩阵”的结果不同。

    矩阵点积向量

    1 import numpy as np
    2 
    3 A = np.array([[1,2],[3,4]])
    4 x = np.array([5,6])
    5 
    6 y1 = A.dot(x)
    7 y1
    8 
    9  [17 39]

    计算:[1 * 5 + 2 * 6 , 3 * 5 + 4 * 6] = [17, 39]

    向量点积矩阵

    1 y2 = x.dot(A)
    2 y2
    3 
    4 [23 34]

    计算:[5 * 1 + 6 * 3 , 5 * 2 + 6 * 4] = [23, 24]

    两个矩阵的点积:矩阵乘法

    2.4 神经网络的“引擎” : 基于梯度的优化

    训练(机器学习中的学习):根据反馈信号逐渐调节这些权重,这个逐渐调节的过程叫作训练。

    导数:斜率 a 被称为 f 在 p 点的导数(derivative)

     更新方向:想减小f(x)的值,只需将x沿着导数的反方向移动一小步。

    梯度(gradient):是张量运算的导数,它是导数这一概念向多元函数导数的推广。

  • 相关阅读:
    Variational Autoencoders and Nonlinear ICA: A Unifying Framework
    各层的特征的差异性
    TriggerBN +
    Exponential family of distributions
    个人加分项
    对老师的建议
    2021.6.19
    2021.6.18
    2021.6.17
    2021.6.16
  • 原文地址:https://www.cnblogs.com/vvzhang/p/14315019.html
Copyright © 2020-2023  润新知