提交 899b83df 编写于 作者: M muli
# 通过MXNet/Gluon来动手学习深度学习
主页在 [http://zh.gluon.ai/](http://zh.gluon.ai/)
主页在 [https://zh.gluon.ai/](https://zh.gluon.ai/)
请使用 [https://discuss.gluon.ai](https://discuss.gluon.ai) 讨论或报告问题
## 如何贡献
所有notebook是用markdown格式存储,这样方便merge改动。jupyter可以通过notedown来直接使用markdown,[参考这里安装](./chapter00_preface/install.md#使用notedown插件来读写github源文件)
build服务器在 http://gluon-ci.mxnet.io 。这台服务器有一块Nvidia M60。
所有markdown文件需要在提交前清除output,它们会在服务器上重新执行生成结果。所以需要保证每个notebook执行不要太久,目前限制是4min。
在本地可以如下build html(需要GPU支持)
```bash
conda env update -f build/build.yml
source activate gluon_zh_docs
make html
```
生成的html会在`_build/html`
如果没有改动notebook里面源代码,所以不想执行notebook,可以使用
```
make html DO_EVAL=0
```
但这样生成的html将不含有输出结果。
......@@ -15,6 +15,8 @@ curl http://zh.gluon.ai/gluon_tutorials_zh.tar.gz -o tutorials.tar.gz
tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz
```
Windows用户可以用浏览器下载[zip格式](https://zh.gluon.ai/gluon_tutorials_zh.zip)并解压,在解压目录文件资源管理器的地址栏输入`cmd`进入命令行模式。
【可选项】配置下载源来使用国内镜像加速下载:
```bash
......@@ -55,7 +57,7 @@ docker run -p 8888:8888 muli/gluon-tutorials-zh
### 使用GPU
默认安装的MXNet只支持CPU。有一些教程需要GPU来运行。假设CUDA7.5或者8.0已经安装了,那么先卸载CPU版本
默认安装的MXNet只支持CPU。有一些教程需要GPU来运行。假设电脑有N卡而且CUDA7.5或者8.0已经安装了,那么先卸载CPU版本
```bash
pip uninstall mxnet
......@@ -174,11 +176,8 @@ Conda安装正常,conda env -f environment.yml失败
##### 药方
* conda config
--prepend channels
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
*
如果是miniconda可以改用Anaconda
* conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
* 如果是miniconda可以改用Anaconda
##### 病情分析
......@@ -192,13 +191,11 @@ conda info -e查看失败信息,建议删除失败的env: conda env remove -
##### 病情分析
pip本身不存在, pip
--version不能正确显示pip版本号和安装目录
pip本身不存在, pip --version不能正确显示pip版本号和安装目录
##### 药方
参考http://pip-
cn.readthedocs.io/en/latest/installing.html 安装pip
参考http://pip-cn.readthedocs.io/en/latest/installing.html 安装pip
##### 病情分析
......@@ -212,12 +209,11 @@ pip install --upgrade pip
##### 病情分析
无法找到匹配的wheel, No matching distribution found for
mxnet>=0.11.1b20170902
无法找到匹配的wheel, No matching distribution found for mxnet>=0.11.1b20170902
##### 药方
确保系统被支持,比如Ubuntu 14.04/16.04, Mac10.11/10.12(10.10即将支持), Windows 10 x64(32位暂时不支持,win7 未测试), 如果都符合,可以试试命令
确保系统被支持,比如Ubuntu 14.04/16.04, Mac10.11/10.12(10.10即将支持), Windows 10(win7 未测试), 如果都符合,可以试试命令
```bash
python -c "import pip; print(pip.pep425tags.get_supported())"
......@@ -286,6 +282,6 @@ Windows默认不支持curl,tar
##### 药方
下载和解压推荐用浏览器和解压软件,手动拷贝
### 最后
如果你尝试了很多依然一头雾水,可以试试docker安装:http://zh.gluon.ai/install.html#docker
如果你尝试了很多依然一头雾水,可以试试docker安装:https://zh.gluon.ai/install.html#docker
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/249)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/249)
......@@ -35,10 +35,10 @@
这套教程通过描述深度学习模型是如何一步步实现的,为大家提供了宝贵的动手实践的机会。因为教程里实现的代码都是可执行的,读者可以根据自己所学和思考课后问题运行或修改代码而得到及时的学习反馈。每个人可以通过及时反馈不断实现自我迭代,从而加深对深度学习的理解。
最后,英文中有句话叫做
最后,英文中有句话叫做
> "Get hands dirty."
> "Get hands dirty."
直译过来就是
> “撸起袖子加油干。”
\ No newline at end of file
> “撸起袖子加油干。”
......@@ -95,4 +95,4 @@ z.backward(head_gradient)
print(x.grad)
```
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/744)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/744)
# 机器学习简介
本书作者跟广大程序员一样,在开始写作前需要来一杯咖啡。我们跳进车准备出发,Alex掏出他的安卓喊一声“OK Google”唤醒语言助手,Mu操着他的中式英语命令到“去蓝瓶咖啡店”。手机这时马上显示出识别的命令,并且知道我们需要导航。接着它调出地图应用并给出数条路线方案,每条方案边上会有预估的到达时间并自动选择最快的线路。
本书作者跟广大程序员一样,在开始写作前需要来一杯咖啡。我们跳进车准备出发,Alex掏出他的安卓喊一声“OK Google”唤醒语言助手,Mu操着他的中式英语命令到“去蓝瓶咖啡店”。手机这时马上显示出识别的命令,并且知道我们需要导航。接着它调出地图应用并给出数条路线方案,每条方案边上会有预估的到达时间并自动选择最快的线路。
好吧,这是一个虚构的例子,因为我们一般在办公室喝自己的手磨咖啡。但这个例子展示了在短短几秒钟里,我们跟数个机器学习模型进行了交互。
......@@ -150,7 +150,7 @@ print(' '.join(res))
#### 语法分析
一个常见语法分析的例子是,给定一个本文序列,如何找出其中的命名实体,例如人物姓名、城市名称等。以下是一个这样的例子。其中Tom、Washington和Sally都是命名实体。
一个常见语法分析的例子是,给定一个文本序列,如何找出其中的命名实体,例如人物姓名、城市名称等。以下是一个这样的例子。其中Tom、Washington和Sally都是命名实体。
| `Tom wants to have dinner in Washington with Sally.` |
| ---------------------------------------- |
......@@ -187,4 +187,4 @@ print(' '.join(res))
机器学习是一个庞大的领域。我们在此无法也无需介绍有关它的全部。有了这些背景知识铺垫,你是否对接下来的学习更有兴趣了呢?
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/746)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/746)
......@@ -123,4 +123,4 @@ true_b, dense.bias.data()
- 在训练的时候,为什么我们用了比前面要大10倍的学习率呢?(提示:可以尝试运行 `help(trainer.step)`来寻找答案。)
- 如何拿到`weight`的梯度呢?(提示:尝试 `help(dense.weight)`
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/742)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/742)
......@@ -153,4 +153,4 @@ true_b, b
尝试用不同的学习率查看误差下降速度(收敛率)
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/743)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/743)
# 使用NDArray来处理数据
对于机器学习来说,处理数据往往是万事之开头。它包含两个部分:数据读取和当数据已经在内存里时如何处理。本章将关注后者。我们首先介绍`NDArray`,这是MXNet储存和变化数据的主要工具。如果你之前用过`NumPy`,你会发现`NDArray``NumPy`的多维数组非常类似。当然,`NDArray`提供更多的功能,首先是CPU和GPU的异步计算,其次是自动求导。这两点使得 `NDArray`能更好地支持机器学习。
对于机器学习来说,处理数据往往是万事之开头。它包含两个部分:数据读取和当数据已经在内存里时如何处理。本章将关注后者。我们首先介绍`NDArray`,这是MXNet储存和变换数据的主要工具。如果你之前用过`NumPy`,你会发现`NDArray``NumPy`的多维数组非常类似。当然,`NDArray`提供更多的功能,首先是CPU和GPU的异步计算,其次是自动求导。这两点使得`NDArray`能更好地支持机器学习。
## 让我们开始
......@@ -123,14 +123,14 @@ z[:] = x + y
id(z) == before
```
但是这里我们还是为`x+y`创建了临时空间,然后在复制到`z`. 需要避免这个开销,我们可以使用操作符的全名版本中的`out`参数:
但是这里我们还是为`x+y`创建了临时空间,然后再复制到`z`需要避免这个开销,我们可以使用操作符的全名版本中的`out`参数:
```{.python .input}
nd.elemwise_add(x, y, out=z)
id(z) == before
```
如果可以现有的数组之后不会再用,我们也可以用复制操作符达到这个目的
如果可以现有的数组之后不会再用,我们也可以用复制操作符达到这个目的
```{.python .input n=16}
before = id(x)
......@@ -142,4 +142,4 @@ id(x) == before
ndarray模块提供一系列多维数组操作函数。所有函数列表可以参见[NDArray API文档](https://mxnet.incubator.apache.org/api/python/ndarray.html)
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/745)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/745)
......@@ -76,4 +76,4 @@ Gluon提供的函数有时候比手工写的数值更稳定。
- 再尝试调大下学习率看看?
- 为什么参数都差不多,但gluon版本比从0开始的版本精度更高?
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/740)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/740)
......@@ -219,4 +219,4 @@ print(get_text_labels(predicted_labels.asnumpy()))
请仔细想想再去对比下我们小伙伴之一@[pluskid](https://github.com/pluskid)早年写的一篇[blog解释这个问题](http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/),看看你想的是不是不一样。
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/741)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/741)
......@@ -61,4 +61,4 @@ for epoch in range(5):
- 尝试多加入几个隐含层,对比从0开始的实现。
- 尝试使用一个另外的激活函数,可以使用`help(nd.Activation)`或者[线上文档](https://mxnet.apache.org/api/python/ndarray.html#mxnet.ndarray.Activation)查看提供的选项。
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/739)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/738)
......@@ -66,7 +66,7 @@ def relu(X):
def net(X):
X = X.reshape((-1, num_inputs))
h1 = relu(nd.dot(X, W1) + b1)
output = relu(nd.dot(h1, W2) + b2)
output = nd.dot(h1, W2) + b2
return output
```
......@@ -115,3 +115,5 @@ for epoch in range(5):
- 我们使用了 `weight_scale` 来控制权重的初始化值大小,增大或者变小这个值会怎么样?
- 尝试改变 `num_hiddens` 来控制模型的复杂度
- 尝试加入一个新的隐含层
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/739)
......@@ -78,4 +78,4 @@ for epoch in range(5):
```
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/737)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/737)
......@@ -226,4 +226,4 @@ for epoch in range(5):
- 如果你有GPU,那么尝试用CPU来跑一下看看
- 你可能注意到比前面的多层感知机慢了很多,那么尝试计算下这两个模型分别需要多少浮点计算。例如$n\times m$和$m \times k$的矩阵乘法需要浮点运算 $2nmk$。
**吐槽和讨论欢迎点[这里](https://discuss.gluon.ai/t/topic/736)**
**吐槽和讨论欢迎点**[这里](https://discuss.gluon.ai/t/topic/736)
......@@ -71,9 +71,9 @@ author = "MXNet Community"
# built documents.
#
# The short X.Y version.
version = '0.1'
version = '0.2'
# The full version, including alpha/beta/rc tags.
release = '0.1'
release = '0.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册