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') / 25516 test_images = test_images.reshape((10000, 28 * 28))17 test_images = test_images.astype('float32') / 25518 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 np2 x = np.array(12)3 x4 5 array(12)6 7 x.ndim8 9 0

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

1 x = np.array([12, 3, 6, 14, 7])2 x3 4 array([12, 3, 6, 14, 7])5 6 x.ndim7 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.ndim6 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.ndim12 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 np2 3 x = np.array([1,2,3])4 y = np.array([4,5,6])5 z = x.dot(y)6 z7 8 32

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

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

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

矩阵点积向量

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

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

向量点积矩阵

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

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

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

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

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

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

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

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

来源:https://www.icode9.com/content-1-830951.html

(0)

相关推荐

  • Python|线代矩阵问题

    问题描述 Python中含有丰富的库提供我们使用,学习数学分支线性代数时,矩阵问题是核心问题.Numpy库通常用于python中执行数值计算,并且对于矩阵操作做了特殊的优化,numpy库通过向量化避免 ...

  • R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

    原文链接:http://tecdat.cn/?p=23184 在本文中,我们将学习如何使用keras,用手写数字图像数据集(即MNIST)进行深度学习.本文的目的是为了让大家亲身体验并熟悉培训课程中的 ...

  • 矩阵相乘

    import numpy as np arr1 = np.array(((1,4),(2,5),(3,2))) arr2 = np.array((3,4)) print('第一个矩阵:\n',arr1 ...

  • 机器学习:爱因斯坦的小贡献

    怎么,爱因斯坦(Albert Einstein)那会儿就有数据科学了吗? 倒不是这个意思,爱因斯坦也没有提出什么数学理论,但他提出了一个针对数学公式的符号简化办法,即爱因斯坦求和约定(Einstein ...

  • 非负矩阵分解NMF

    non-negative matrix factorization,简写为NMF,  翻译为非负矩阵分解,属于矩阵分解的一种算法.在特征分解,SVD等传统的矩阵分解技术中,分解后的矩阵会出现负值,但是 ...

  • 支持向量机(SVM)的约束和无约束优化、理论和实现

    优化是机器学习领域最有趣的主题之一.我们日常生活中遇到的大多数问题都是通过数值优化方法解决的.在这篇文章中,让我们研究一些基本的数值优化算法,以找到任意给定函数(这对于凸函数最有效)的局部最优解.让我 ...

  • 太强了,竟然可以根据指纹图像预测性别!

    重磅干货,第一时间送达 https://www.kaggle.com/ruizgara/socofing #import necessary librariesimport numpy as npim ...

  • 奇异值分解SVD

    矩阵分解在机器学习领域有着广泛应用,是降维相关算法的基本组成部分.常见的矩阵分解方式有以下两种 1. 特征分解Eigendecomposition, 也叫作谱分解Spectral decomposit ...

  • 在python 深度学习Keras中计算神经网络集成模型

    原文链接:http://tecdat.cn/?p=7227 神经网络的训练过程是一个挑战性的优化过程,通常无法收敛. 这可能意味着训练结束时的模型可能不是稳定的或表现最佳的权重集,无法用作最终模型. ...

  • Python深度学习基于PyTorch(附完整PPT下载)

    人工智能与算法学习 24篇原创内容 公众号 作者:吴茂贵,资深大数据和人工智能技术专家,就职于中国外汇交易中心,在BI.数据挖掘与分析.数据仓库.机器学习等领域工作超过20年!在基于Spark.Ten ...

  • 深度学习优化背后的数学基础

    转载于 :机器之心 深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器. 一般而言,神经网络的整体性能取决于几个因素.通常最受关注的是网络架构,但这只是众多重要元 ...

  • DL:听着歌曲《成都》三分钟看遍主流的深度学习的神经网络的发展框架(1950~2018)

    DL:听着歌曲<成都>三分钟看遍主流的深度学习的神经网络的发展框架(1950~2018) 视频链接:听着歌曲<成都>三分钟看遍主流的深度神经网络的发展框架(1950~2018) ...

  • 经验 | 深度学习优化背后的数学基础

    仅作分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 深度学习中的优化是一项极度复杂的任务,本文是一份基础指南,旨在从数学的角度深入解读优化器. 一般而言,神经网络的整体性能取决于几个因素.通 ...

  • 一文掌握深度学习、神经网络和学习过程的历史

    全文共3133字,预计学习时长6分钟 本质上,深度学习是一个新兴的时髦名称,衍生于一个已经存在了相当长一段时间的主题--神经网络. 从20世纪40年代开始,深度学习发展迅速,直到现在.该领域取得了巨大 ...

  • 【深度学习】收藏|神经网络调试Checklist

    前言 作为一名每天与神经网络训练/测试打交道的同学,是否经常会遇到以下这几个问题,时常怀疑人生: 怎么肥事,训练正常着呢,咋效果这么差呢? 嗯..再等等是不是loss就更低了.啊?明明loss更低了呀 ...

  • 基于人工神经网络的深度学习技术

    人工智能领域的基础技术仍然一直行驶在快车道上,实际用例也如雨后春笋一般涌现,不仅对全球经济产生了巨大影响,也渗透到了人们日常生活的各个方面.那么基于人工神经网络的深度学习技术有哪些形式? 基于人工神经 ...

  • 使用Python,机器学习和深度学习的5个很棒的计算机视觉项目创意!

    重磅干货,第一时间送达 计算机视觉属于人工智能领域,可以通过处理图像和图片来解决现实生活中的视觉问题.计算机识别.理解.识别数字图像或视频以自动执行任务的能力是计算机视觉发展的主要目标. 人类可以轻松 ...