沐神《动手学深度学习》使用笔记
1.引言沐神提到自己看的三本书:《算法导论》《模式识别和机器学习》即PRML《统计学习基础》一个教训:计算机科学是动手的学科,没有足够的动手能力难以取得很好的成果。所以一定要重视编程,不要只推倒理论。(作为一个跨专业硕士,我也一直觉得编程只是手段和工具,没有足够的重视,事实证明很愚蠢的行为)2.关于人工智能,机器学习和深度学习我们很容易就能找到一些连世界上最好的程序员也无法仅仅用编程...
1.引言
沐神提到自己看的三本书:
《算法导论》
《模式识别和机器学习》即PRML
《统计学习基础》
一个教训:计算机科学是动手的学科,没有足够的动手能力难以取得很好的成果。所以一定要重视编程,不要只推倒理论。(作为一个跨专业硕士,我也一直觉得编程只是手段和工具,没有足够的重视,事实证明很愚蠢的行为)
2.关于人工智能,机器学习和深度学习
我们很容易就能找到一些连世界上最好的程序员也无法仅仅用编程技巧解决的简单问题。例如,假设我们想要编写一个判定一张图像中有没有猫的程序。这件事听起来好像很简单,对不对?程序只需要对每张输入图像输出“真”(表示有猫)或者“假”(表示无猫)即可。但令人惊讶的是,即使是世界上最优秀的计算机科学家和程序员也不懂如何编写这样的程序。
我们该从哪里入手呢?我们先进一步简化这个问题:若假设所有图像的高和宽都是同样的 400 像素大小,一个像素由红绿蓝三个值构成,那么一张图像就由近 50 万个数值表示。那么哪些数值隐藏着我们必要的信息呢?是所有数值的平均数,还是四个角的数值,抑或是图像中的某一个特别的点?事实上,要想解读图像中的内容,你需要寻找仅仅在结合成千上万的数值时才会出现的特征,比如边缘、质地、形状、眼睛、鼻子等,最终才能判断图像中是否含有猫。
一种解决以上问题的思路是逆向思考。与其设计一个解决问题的程序,我们不如从最终的需求入手来寻找一个解决方案。事实上,这也是目前的机器学习和深度学习应用共同的核心思想:我们可以称其为“用数据编程”。与其枯坐在房间里思考怎么设计一个识别猫的程序,不如利用人类肉眼在图像中识别猫的能力。我们可以收集一些已知包含猫与不包含猫的真实图像,然后我们的目标就转化成如何从这些图像入手来得到一个可以推断出图像中是否含有猫的函数。这个函数的形式通常通过我们的知识来对针对特定问题选定:例如我们使用一个二次函数来判断图像中是否含有猫。但是像二次函数系数值这样的函数参数的具体值则是通过数据来确定。
通俗来说,机器学习是一门讨论各式各样适用于不同问题的函数形式,以及如何使用数据来有效地获取函数参数具体值的学科。深度学习是指机器学习中的一类函数,它们的形式通常为多层神经网络。
机器学习研究如何使计算机系统利用经验改善性能。它是人工智能领域的分支,也是实现人工智能的一种手段。在机器学习的众多研究方向中,表征学习关注如何自动找出表示数据的合适方式,以便更好地将输入变换为正确的输出。而本书所要重点探讨的深度学习是具有多级表示的表征学习方法。在每一级(从原始数据开始),深度学习通过简单的函数将该级的表示变换为更高级的表示。因此,深度学习模型也可以看作是由许多简单函数复合而成的函数。当这些复合的函数足够多时,深度学习模型可以表达非常复杂的变换。
深度学习可以逐级表示越来越抽象的概念或模式。以图像为例,它的输入是一堆原始像素值。深度学习模型中,图像可以逐级表示为特定位置和角度的边缘、由边缘组合得出的花纹、由多种花纹进一步汇合得到的特定部位的模式等。最终,模型能够较容易根据更高级的表示完成给定的任务,例如识别图像中的物体。值得一提的是,作为表征学习的一种,深度学习将自动找出每一级表示数据的合适方式。
因此,深度学习的一个外在特点是端到端的训练。也就是说,并不是将单独调试的部分拼凑起来组成一个系统,而是将整个系统组建好之后一起训练。比如说,计算机视觉科学家们之前曾一度将特征构造与机器学习模型的构建分开处理,像是 Canny 边缘探测 [20]和 SIFT 特征提取 [21]曾占据统治性地位达 10 年以上,但这也就是人类能找到的最好方法了。当深度学习进入这个领域,这些特征提取方法就被性能更强的自动优化的逐
3.学习python
中文教程 http://www.runoob.com/python3/python3-tutorial.html
4.社区
5.获取和运行代码
Linux版本为例,其他类似,参考官方
# 1.install Miniconda/anaconda of specific version
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
# 2.download codes
mkdir gluon_tutorials_zh-1.0 && cd gluon_tutorials_zh-1.0
curl https://zh.gluon.ai/gluon_tutorials_zh-1.0.tar.gz -o tutorials.tar.gz
tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz
# 3.set faster conda mirrors
conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# 4.install conda environment && activate
conda env create -f environment.yml
source activate gluon
# 5. Browser access
jupyter notebook
这时在浏览器打开 http://localhost:8888 (通常会自动打开)就可以查看和运行本书中每一节的代码了。
代码可能需要自动下载数据集和预训练模型,默认使用美国站点下载。可以在运行 Jupyter 前指定 MXNet 使用国内站点下载数据和模型。
set MXNET_GLUON_REPO=https://apache-mxnet.s3.cn-north-1.amazonaws.com.cn/ jupyter notebook
6.更新代码和运行环境
# update codes
wget https://zh.gluon.ai/gluon_tutorials_zh.zip
unzip gluon_tutorials_zh.zip
cd gluon_tutorials_zh
# update environment
conda env update -f environment.yml
7.使用 GPU 版的 MXNet
# uninstall mxnet-cpu
pip uninstall mxnet
# correct nvironment.yml to mxnet-cu90
# update environment
conda env update -f environment.yml
8.浏览器使用官方jupyter notebook
5中那样浏览器打开 http://localhost:8888 ,
使用官方的jupyter notebook文件进行学习即可,官方的教程十分友好,不再赘述。
9.参考资料
更多推荐
所有评论(0)