一. 导言
本教程适合对人工智能有一定的了解的同学, 特别是对实际使深度学习感兴趣的学, 程师和研究员. 但本教程并不要求你有任何深度学习或者机器学习的背景知识, 我们将从头开始解释每个概念. 虽然深度学习技术与应的阐述涉及了数学和编程, 但你只需了解基础的数学和编程, 例如基础的线性代数, 微分和概率, 以及基础的 Python 编程本教程将全介绍深度学习从模型构造到模型训练的, 以及它们在计算机视觉和然语处理中的应. 我们不仅将阐述算法原理, 还将基于 Apache MXNet 来演它们的实现和运. 如果你之前没有接触过 Python, 可以参考中教程 http://www.runoob.com/python/python-tutorial.html 或英教程 http://learnpython.org/ . 当然, 如果你只对本教程中的数学部分感兴趣, 你可以忽略掉编程部分, 反之亦然.
二. 安装
由于笔者本人用的是 Windows 操作系统, 因此只需要在 Windows 命令行界面的模式下输入:
pip install mxnet
于是很快就可以安装完成了, 如果不能安装的话, 我们可以采用游侠加速器, 在电脑上安装这个加速器, 注册登录之后就可以使用了. 这个加速器是可以免费使用一天的, 之后的话基本上是一个月 30 元, 对于学习计算机的朋友来说也并不是很贵, 可以左转到百度搜索下载游侠加速器即可.
三. 1: 数据操作
在深度学习中, 我们通常会频繁地对数据进操作. 作为动学深度学习的基础, 本节将介绍如何对内存中的数据进操作. 在 MXNet 中, NDArray 是存储和变换数据的主要具, 数据操作对于我们之后的学习相当重要. 如果你之前过 NumPy, 你会发现 NDAr-ray 和 NumPy 的多维数组常类似. 然而, NDArray 提供 GPU 计算和动求梯度等更多功能, 这些使得 NDArray 更加适合深度学习.
首先我们从 MXNet 当中导入 ndarray 模块, 这里的 nd 是 ndarray 的缩写形式.
我们输入:
from mxnet import nd
然后我们使用 arange 函数创建一个行向量:
x = nd.arange(12)
输出结果是:
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.]
- <NDArray 12 @CPU(0)>
- 这时返回了个 NDArray 实例, 其中包含了从 0 开始的 12 个连续整数. 从打印 x 时显的属性
- < NDArray 12 @CPU(0)>
- 可以看出, 它是度为 12 的维数组, 且被创建在 CPU 主内存上. 其中 "@cpu(0)" 的 0 没有特别的意义, 并不代表特定的
- CPU 核心. 我们接下来通过 shape 函数来获取这个对象的形状: x.shape
输出:
(12,)
我们同时可以利用 size 属性来得到这个对象实例当中总共的元素个数:
x.size
输出:
12
下使 reshape 函数把向量 x 的形状改为(3,4), 也就是个 3 4 列的矩阵, 并记作 X, 除了形状不变之外, x 当中的元素保持不变.
X = x.reshape((3, 4))
输出:
[[ 0. 1. 2. 3.]
[ 4. 5. 6. 7.]
[ 8. 9. 10. 11.]]
<NDArray 3x4 @CPU(0)>
接下来, 我们来输出一个张量(也就是三维的矩阵), 并且让矩阵当中的每一个元素均为零:
nd.zeros((2, 3, 4))
输出结果:
[[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]]
<NDArray 2x3x4 @CPU(0)>
同时我们还可以创建各元素均为 1 的张量, 输入:
nd.ones((3, 4))
输出:
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
<NDArray 3x4 @CPU(0)>
我们也可以自定义我们要创建的 NDArray 当中的每一个元素的值:
Y = nd.array([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
输出:
[[2. 1. 4. 3.]
[1. 2. 3. 4.]
[4. 3. 2. 1.]]
<NDArray 3x4 @CPU(0)>
有些情况下, 我们需要随机成 NDArray 中每个元素的值. 下我们创建个形状为 (3,4) 的 NDArray. 它的每个元素都随机采样于均值为 0 标准差为 1 的正态分布.
输入:
nd.random.normal(0, 1, shape=(3, 4))
输出:
- [[ 2.2122064 0.7740038 1.0434405 1.1839255 ]
- [ 1.8917114 -1.2347414 -1.771029 -0.45138445]
- [ 0.57938355 -1.856082 -1.9768796 -0.20801921]]
- <NDArray 3x4 @CPU(0)>
三. 2: 运算
NDArray 持量的运算符 (operator). 例如, 我们可以对之前创建的两个形状为(3, 4) 的 NDArray 做按元素加法. 所得结果形状不变.
比如我们可以做这些矩阵运算:
- X + Y
- X * Y
- X / Y
- Y.exp()(矩阵的每个元素做指数运算)
输出:
- [[ 7.389056 2.7182817 54.59815 20.085537 ]
- [ 2.7182817 7.389056 20.085537 54.59815 ]
- [54.59815 20.085537 7.389056 2.7182817]]
- <NDArray 3x4 @CPU(0)>
除了按元素计算外, 我们还可以使 dot 函数做矩阵运算. 下将 X 与 Y 的转置做矩阵乘法. 由于 X 是 3 4 列的矩阵, Y 转置为 4 3 列的矩阵, 两个矩阵相乘得到 3 3 列的矩阵.
nd.dot(X, Y.T)
输出:
[[ 18. 20. 10.]
[ 58. 60. 50.]
[ 98. 100. 90.]]
<NDArray 3x3 @CPU(0)>
这就是我们今天的数据操作的教程了, 希望大家能够亲自上手试一试, 才会有好的效果.
来源: https://www.cnblogs.com/geeksongs/p/10060464.html