深度学习框架Keras学习系列(一):线性代数基础与numpy使用(Linear Algebra Basis and Numpy)

又开一个新坑~~因为确实很有必要好好地趁着这个热潮来研究一下深度学习,毕竟现在深度学习因为其效果突出,热潮保持高涨不退,上面的政策方面现在也在向人工智能领域倾斜,但是也有无数一知半解的人跟风吹捧,于是希望借此教程,让自己和读者一起借助keras,从上到下逐渐摸清楚深度学习领域的相关知识,包括它的前世今生,它的使用方法,它的应用领域等等。该系列教程各部分链接:Keras: 深度学习框架学习系列(一):
摘要由CSDN通过智能技术生成

又开一个新坑~~

因为确实很有必要好好地趁着这个热潮来研究一下深度学习,毕竟现在深度学习因为其效果突出,热潮保持高涨不退,上面的政策方面现在也在向人工智能领域倾斜,但是也有无数一知半解的人跟风吹捧,于是希望借此教程,让自己和读者一起借助keras,从上到下逐渐摸清楚深度学习领域的相关知识,包括它的前世今生,它的使用方法,它的应用领域等等。

该系列教程各部分链接:

深度学习框架Keras学习系列(一):线性代数基础与numpy使用
深度学习框架Keras学习系列(二):神经网络与BP算法
深度学习框架Keras学习系列(三):深度学习概念初探





另外,请先安装好python的jupyter notebook工具,后面的代码结果演示都将是基于jupyter notebook的,这样方便大家可以跟着运行程序看效果~~

线性代数基础

向量与矩阵

这个请看这篇博客OpenGL学习脚印: 向量和矩阵要点(math-vector and matrices)

重点在于了解向量与矩阵的基本概念,以及向量和矩阵的加减乘除运算规则。并且理解向量就是一种特殊的矩阵。

张量(Tensor)

这个请看这篇博客tensorflow中张量的理解

简而言之,张量是线性代数中的一种概念,它可以被理解为一个n维数组,它的描述单位是阶。我们规定,0阶的张量是标量(scalar,如1,4,23这样的数字),1阶张量是向量(vector,如[1,2]),2阶张量是矩阵(matrix,如[[1,2,3],[2,3,4]]),三阶张量[[[1,2],[3,4]],[[5,6],[7,8]]],以此类推。所以,张量实际是对数的表示的一种推广。

之所以要理解张量,是因为张量是tensorflow这个人工智能框架的基本元素,而keras实际上是在tensorflow与Theano(另一个相似框架,已经被维护者宣布不再继续支持)之上做了一层封装,使得我们可以很简单地通过keras的接口去建模,因此,当后面要了解人工智能算法的原理时,是绕不开对于tensorflow的理解的,也就绕不开对其核心计算元素张量的理解。(目前,我个人对为什么tensorflow要用张量作为运算元素的一个动机理解是,张量用于描述模型的输入特征值时,是非常合适的)。

Numpy

为什么用Numpy

 Numpy是python中的一款高性能科学计算和数据分析的基础包,是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩阵(matrix))。据说NumPy将Python相当于变成一种免费的更强大的MatLab系统。

其内部工具包括:包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来使用C++,Fortran或Matlab等所做的任务。

因为深度学习的运算中会涉及大量线性代数的运算,即向量与矩阵相关的一些运算,而Numpy中封装好了许多高效的线性代数运算方法,我们只需调用即可,多么方便。

Numpy的使用

一般来说,python中约定俗成的引入numpy的方式是:

  import numpy as np

之后调用的时候,我们用np.方法名()就ok。

下面,我们从numpy中最常用的一些类来展开描述。

多维数组:ndarray

参考Quickstart tutorial

ndarray是numpy中数组的类,它是numpy最主要的一个构成要素(也被称为数组(array)),其本质是元素同质的多维数组,也可说是同类元素的一张表(一般元素是数字),索引任一元素的方式是通过一个元组来进行。而在numpy中,维度被称为“axes(轴)”,轴的数量成为“rank(阶)”。

比如说,一个3d空间中的点的坐标为[1,2,1]是一个阶为1的数组,因为它只有一个轴,而这个轴的长度为3. 而[[1,0,0],[0,1,2]]是一个二阶(2维的)的数组,它第一个维度(轴)的长度为2,第二个维度(轴)的长度为3.

  • ndarray的常用属性

    • ndim:数组的轴(维度)的数量,即阶。
    • shape:数组的维度。是一个表示数组在每个维度上的尺寸的元组。
    • size:数组中的元素的总数量。
    • dtype:描述数组元素类型的一个对象。
    • itemsize:数组元素的大小(以字节为单位)。
    • data:一个包含数组元素的缓冲区。
  • 举例

>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape
(3, 5)
>>> a.ndim
2
>>> a.dtype.name
'int64'
>>> a.itemsize
8
>>> a.size
15
>>> type(a)
<type 'numpy.ndarray'>
>>> b = np.array([6, 7, 8])
>>> b
array([6, 7, 8])
>>> type(b)
<type 'numpy.ndarray'>
  • Array的创建方法

    1. 用python的list作为参数传入numpy的array的构造函数中:

                
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值