Lesson 1 Wiki http://wiki.fast.ai/index.php/Lesson_1
Lesson 1 Notes http://wiki.fast.ai/index.php/Lesson_1_Notes
以下是一些个人零碎的笔记,组织方式比较随意,觉得有用就拿走吧。
学习任务
- Cygwin
- Tmux
- Python基础语法
- Anaconda管理
- Jupyter Notebook 使用
- 开发环境调试完毕
- 下载训练数据并训练成功
Drivers 驱动
- CUDA-一种由Nvidia推出的通用并行计算架构和应用程序编程接口模型。02
- cuDNN-一套Nvidia专门为深度神经网络设计的GPU计算加速库。
> nvidia-smi
展示nvidia显卡使用信息
Tools 各类相关工具介绍
Cygwin
A distribution of GNU and other Open Source tools running on Windows. It contains thousands of packages for Open Source world. They can be used for one of the provided Unix shells like bash, tcsh or zsh.
为了让cygwin安装软件更便捷,可将安装程序拷贝到安装目录(默认 c:\cygwin64\),并执行以下命令:
alias apt-get='/setup-x86_64.exe -q -P
安装软件时,只需要 apt-get wget crul 等。
Tmux
Terminal multiplexer. Let your program run on your server when you close the terminal, it alse split screen into multi input part.
教程: http://blog.jobbole.com/87278/ http://blog.jobbole.com/87584/
tmux 和 screen 很像,但比 screen 更好。要问好在哪里,简单的回答就是虽然与 screen 的功能相同,但是 tmux 设计得更好。screen 虽然可用,但是很不稳定。
以下是一些 tmux 超越 screen 的地方:
• screen 的项目大体上已经终止了,并且代码中有大量的问题
• tmux 是一个活跃的项目,并且其代码库经常进行更新
• tmux 使用的是真正的客户端/服务器模型,而 screen 只是模拟了这种模型的行为
• tmux 同时支持 emacs 和 vim 的快捷键
• tmux 支持自动重命名窗口
• tmux 可以高度的脚本化
• tmux 的窗口分割功能更加先进
tmux 默认会先从 /etc/tmux.conf 加载系统级的配置项,然后从 ~/.tmux.conf 加载用户级的配置项。
tmux常见命令
• C-b ? 显示帮助
• C-b s 列出所有tmux会话,同 tmux ls
• tmux attach 或 tmux a 连接到tmux进程,还可以指定进程 tmux a -t session-name
• C-b d 断开当前会话,同 tmux detach,之前的工作不会丢失
• C-b $ 重命名当前会话
• C-b " 将窗口垂直分割成两个面板,C-b % 将窗口水平分割成两个面板
• C-b arrow 光标移动到面板 panes
• C-b } 与下一个面板交换位置
• C-b { 与上一个面板交换位置
Source 命令
在本shell中执行脚本中的命令,通常用来设置别名、环境变量等。
Pip (Python Package Index)
常用命令:
pip search pkg_name
查找包的信息(Python3版本的,改为pip3)
pip install pkg_name
安装包(Python3版本的,改为pip3)
Jupyter Notebook
以前叫 ipython notebook,可用于文学式编码。独立出来后,现在也支持 python 外的其他语言。
运行方式:先切换到代码所在目录,再运行 >jupyter notebook
在notebook编辑界面(焦点不处于文本框内)常用快捷键(和vi和像):
- h 展示帮助,这是最重要的快捷键,常看看
- Enter 进入单元格编辑模式
- Esc 退出单元格编辑模式
- Ctrl+Enter 运行单元格。[ ]表示未运行,[ * ]表示运行中,[ 3 ]表示单元格运行的次序。
- a 上面增加一行
- b 下面增加一行
- dd 删除本行
- m 将单元格变为Markdown格式,支持Markdown语法(本文就是用Markdown写的)
- f 查找
- x 剪切单元格
- c 复制单元格
- v 粘贴单元格
- shift+m 合并选中单元格(按Shift多选。仅选中一个单元格时,合并下一个单元格)
- y 将单元格变为代码格式
- z 撤销操作
- s 保存
Jupyter Notebook Magic Words
可以在单元格中运行的特殊命令,能让你控制 notebook 本身或执行系统调用(例如更改目录)。
例如,可以使用 %matplotlib 将 matplotlib 设置为以交互方式在 notebook 中工作。
Magic 命令的前面带有一个或两个百分号(% 或 %%),分别对应行 Magic 命令和单元格 Magic 命令。
% 行 Magic 命令:仅应用于编写 Magic 命令时所在的行
%% 单元格 Magic 命令:应用于整个单元格。
常用Magic关键字
- 代码计时 %timeit 。要测算整个单元格的运行时间,请使用 %%timeit
- 使用 %matplotlib 将 matplotlib 设置为以交互方式在 notebook 中工作
- 要直接在 notebook 中呈现图形,使用命令 %matplotlib inline
- 在 %matplotlib inline 之后使用 %config InlineBackend.figure_format = 'retina' 来呈现分辨率较高的图像
- %pdb 开启交互式调试器
- 前置输入 ?? ,可展示调用的源码。
所有Magic关键词 http://ipython.readthedocs.io/en/stable/interactive/magics.html
Anaconda
A python environment and packages manager,是Python的一个包管理器又是一个环境管理器。
Anaconda = python + IPython Notebook + 集成开发环境Spyder + 版本切换工具 virtualenv
Anaconda多环境多版本python配置指导
Anaconda常用命令
• conda creat -n python27 python=2.7 --新建一个名为 python27 的python 版本 2.7 环境,所有包得再次安装。
• source activate python27 激活python27环境 (windows下命令为 activate python27)
• source deactivate python27 取消激活python27环境 (windows下命令为 deactivate python27)
• conda info -e 查看安装的conda环境,标 * 的为当前激活环境
• conda list 列出当前环境已安装的包
• conda search PackageName --查找包的名字。有一些包conda没有,可用pip安装,如keras。
• conda install PackageName --install python package,like pip。默认安装到当前激活的环境
• conda create -n 新环境名 --clone 旧环境名
注意:
- 不同终端,当前激活的conda环境不一致,通过conda命令安装的包只影响当前环境。
- Anaconda 4.1.0 之后,可在notebook里面直接选择python版本。
Python Libraries
- Pip -Python安装包管理工具
- Numpy -在Python中操作线性代数
- Matplotlib -绘图和可视化(2D)
- Scikit-learn -机器学习库
- Scipy -数值计算库
- Pandas -高性能数据分析库
- Scrappy -网络数据爬取框架
- NLTK -Nature Language Tool Kit 自然语言工具箱
- Pattern -网络挖掘库
- Seaborn -统计数据可视化
- OpenCV -计算机视觉库
- Rpy2 -R语言接口
- Py-graphviz -统计数据绘图
- OpenBLA02 -线性代数库
kaggle-cli
kaggle的命令行工具,可用来下载kaggle竞赛data,并提及成绩。
安装: pip install kaggle-cli
Machine Learning Framework / Libraries
- TensorFlow-谷歌的开源DL框架,可以说支撑起了部分产品,比如谷歌翻译。
- Theano-一个靠谱而且受欢迎的机器学习框架。
- Caffe-来自伯克利的深度学习框架。
- Torch-一个GPU优先的科学计算框架,广泛支持机器学习算法。
- MXNET-可扩展性极强的DL系统,得到了亚马逊和一些大学的支持。
优秀的抽象库
- Keras-一个很棒的用Python语言编写的神经网络库,基于TensorFlow或Theano开发
- Keras中文文档 http://keras-cn.readthedocs.io/en/latest/
- Lasagne-用于构造和训练神经网络的轻量库。
其它笔记
万能学习机,有三块至关重要的点:
• 无限灵活函数:神经网络是一种函数,是通用逼近机
• 万能参数拟合:梯度下降法、反向传播 Back-prop
• 快速和伸缩性:GPC、云计算
训练数据的文件夹结构:
• Train、valid目录下,需要把图片分门别类放在对应子目录下,如cat、dog
• 最好先创建 sample 目录来试验一下分类效果,其下目录结构同正式目录
• When you need to use a trained model for predictions on unseen/unlabeled test data, you can create a "test/unknown" subdirectory (as in "unknown class label") and place your data there.
The standard practice in building machine learning models is to split our data into the following subsets:
• Training set: This is the data that our algorithm is going to use to fit parameters in order to make predictions
• Validation set: The data we use to fine tuning our parameters. Fine tuning 的意思是只让分类模型输出指定的几个分类子集。
• Test set: The data we use to test our final model against. Since this data has not been seen by the model before, it is meant to simulate how it will perform against new data.
深度学习模型由两部分构成:
- 模型,如 vgg16.py
- 权重,如 vgg16.h5
名词解释
epoch :迭代次数
VGG Visual Geometry Group:牛津大学视觉几何组
one hot encoding :When encoding categorical variables, where an array containing just a single 1 in the position corresponding to the category, is very common in deep learning.
例如,当有两个类别: [0,1] ;当有三个类别: [1,0,0]
课程相关环境的搭建,请见我上篇文章:
创建Fast.AI深度学习环境虚拟机
Fast.AI课程文件、教学视频及学习环境虚拟机下载分享