TensorFlow 深度学习笔记 逻辑回归 实践篇
Practical Aspects of Learning
转载请注明作者:梦里风林
Github工程地址:https://github.com/ahangchen/GDLnotes
欢迎star,有问题可以到Issue区讨论
官方教程地址
视频/字幕下载
课程目标:学习简单的数据展示,训练一个Logistics Classifier,熟悉以后要使用的数据
Install Ipython NoteBook
可以参考这个教程
- 可以直接安装anaconda,里面包含了各种库,也包含了ipython;
- 推荐使用python2的版本,因为很多lib只支持python2,而且python3在升级中,支持3.4还是3.5是个很纠结的问题。
- 安装anaconda后直接在终端输入 ipython notebook,则会运行一个ipython的server端,同时在你的浏览器中打开基于你终端目录的一个页面:

- 点开ipynb文件即可进入文件编辑页面

上图即为practical部分的教程,可以在github下载
官方推荐使用docker来进行这部分教程,但简单起见我们先用ipython notebook
Install TensorFlow
安装教程就在TensorFlow的github页上>>>点击查看
按照官方的流程装就好了,这里讲一下几种方式的特点:
- pip: 安装在全局的python解释器中,简单
- Third party: Virtualenv, Anaconda and Docker:都能创建tensorflow独立的编译环境,但就是多了一份包
- Source: 能够适应不同的python版本(比如编译一个3.5版的),但源码编译可能有许多坑
- ubuntu安装时,需要注意自己的python - pip - tensorflow版本是否对应(比如是否都是2.7),
- 使用sudo命令时,注意自己的环境变量是否变化(会导致pip或python命令对应的版本变化)
- 具体讲一下ubuntu安装tensorflow流程:
- 安装anaconda2
确定自己终端的pip和python版本:
$ pip -V && python -V
确认使用的是否都来自anaconda,如果不是,则应该使用类似这样的命令运行对应的pip:
$ /home/cwh/anaconda2/bin/pip -V
使用sudo命令时最好也看一下版本- 使用anaconda创建一个tensorflow虚拟环境:
$ conda create -n tensorflow python=2.7 切换到tensorflow环境下(实际上是更换了环境变量里的pip和python),下载安装tensorflow,需要sudo权限
```
$ source activate tensorflow
(tensorflow)$ sudo pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0rc0-cp27-none-linux_x86_64.wh$ source deactivate
```
注意如果安装的是gpu版本,还需要按照官网说明安装cuda和cudaCNN
- 安装成功后就可以在tensorflow的python环境下,执行import tensorflow看看了。
notMNIST
修改的MNIST,不够干净,更接近真实数据,比MNIST任务更困难。
Todo
我将官方教程的一个文件拆成了多个(以文件持久化为边界),然后在schedule.py里统一调用,在各个文件里可以执行各个部分的功能测试。
- 下载
- 使用urlretrieve来获取数据集notMNIST_large.tar.gz和notMNIST_small.tar.gz
代码示例:load_data.py
- 解压
- 使用tarfile模块来解压刚刚下载的压缩包
代码示例:extract.py
- 读图 - 展示 - 序列化
- 用ndimage读取一部分图片,用pickle将读取到的对象(ndarray对象的list)序列化存储到磁盘
- 用matplotlib.plot.imshow实现图片显示,可以展示任意的numpy.ndarray,详见show_imgs(dataset)
- 这里展示的是二值化图片,可以设置显示为灰度图
- 将每个class对应的图像数据集序列化到磁盘
代码示例:img_pickle.py
- 整理数据集
- 用pickle读取pickle文件,
- 从train_folder中为10个class分别获取10000个valid_dataset和20000个train_dataset,
- 其中对每个class读取到的数据,用random.shuffle将数据乱序化
- 将各个class及其对应的label序列化到磁盘,分别为训练器和校验集
- 从test_folder中为10个class分别获取10000个test_dataset,
- 其中对每个class读取到的数据,用random.shuffle将数据乱序化
- 将各个class及其对应的label序列化到磁盘,作为测试集
代码示例merge_prune.py
- 去除重复数据
- load_pickle,加载dataset
- 先将valid_dataset中与test_dataset重复部分剔除,再将train_dataset中与valid_dataset重复部分剔除
- 每个dataset都是一个二维浮点数组的list,也可以理解为三维浮点数组,
- 比较list中的每个图,也就是将list1中每个二维浮点数组与list2中每个二维浮点数组比较
示例代码即为clean_overlap.py中的imgs_idx_except
- 我们在拿list1中的一个元素跟list2中的一个元素比较时,总共需要比较len(list1) * len(list2) * image_size * image_size次,速度极慢
- 实际上这是有重复的计算的,就在于,list2中的每个元素,都被遍历了len(list1)次
- 因此有这样的一个优化,我们遍历每个图,用图中的灰度值,仿照BKDRHash,得到每个图都不同的hash值,比较hash值来比较图像
示例代码即为clean_overlap.py中的imgs_idx_hash_except
- 这样每个图都只需要访问一次,计算hash的时间变为(len(list1) + len(list2)) * image_size * image_size
- 比较的次数是len(list1) * len(list2)
- 由于我们的数据中,list1和list2的长度是大数,所以节省的时间是相当可观的
在我的机器上,比较完valid_dataset和test_dataset需要的时间分别是25000秒(10000次比较,每次2-3秒)和60秒
然后再将清理后的数据序列化到磁盘即可
代码示例: clean_overlap.py
- 训练一个logistics 模型
- 将train_dataset作为输入,用valid_dataset进行验证(预测成功率82.5%)
为了重复利用训练后的分类器,将其序列化到磁盘
代码示例: logistic_train.py
- Measure Performance
- 分类器会尝试去记住训练集
- 遇到训练集中没有的数据时,分类器可能就没辙了
- 所以我们应该measure的是,分类器如何产生新数据(生成能力(推导能力)越大,说明它应对新数据能力越强)
- 仅measure分类器记忆数据集的能力并不能应对新数据(没有学到规律),所以不应该拿旧数据去measure
因此measure的方式应该是拿新数据去看分类器的预测准确度(never see, can't memorize)
- 但是在measure的过程中,我们会根据测试数据去重新调整分类器,使其对所有测试数据都生效
也就是说测试数据变成了训练集的一部分,因此这部分数据我们只能作为valid_dataset,而不能用于衡量最后的performance
解决方法之一即,最终进行performance measure的数据集,必须是调整分类器的过程中没有使用过的
即坚持一个原则,测试数据不用于训练
在机器学习比赛Kaggle中,有public data,validate data,并有用于测试(选手未知)的private data,只有在训练时自己的分类器时,预先取一部分数据作为test data,
才能不会在train和valid的过程中被已有数据所蒙蔽
- Validation dataset
- 验证集越大,验证的可信度越大
- 统计学上,调整分类器后,当30个以上预测结果的正确性发生变化的话,这种变化是可信的,值得注意的,小于30是噪音
- 因此Validation dataset通常数据要大于30000个,在准确率变化高于0.1%时,认为分类器的performance变化
- 但这样需要的数据往往偏多,所以可以尝试交叉验证(cross validation),交叉验证有个缺点是速度慢
觉得我的文章对您有帮助的话,就给个star吧
(程序员一定要有一个Github账号啊!)
TensorFlow 深度学习笔记 逻辑回归 实践篇的更多相关文章
- Google TensorFlow深度学习笔记
Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...
- 深度学习之逻辑回归的实现 -- sigmoid
1 什么是逻辑回归 1.1逻辑回归与线性回归的区别: 线性回归预测的是一个连续的值,不论是单变量还是多变量(比如多层感知器),他都返回的是一个连续的值,放在图中就是条连续的曲线,他常用来表示的数学方法 ...
- TensorFlow——深度学习笔记
深度学习与传统机器学习的区别 传统机器学习输入的特征为人工提取的特征,例如人的身高.体重等,深度学习则不然,它接收的是基础特征,例如图片像素等,通过多层复杂特征提取获得. 深度学习.人工智能.机器学习 ...
- TensorFlow深度学习笔记 文本与序列的深度模型
Deep Models for Text and Sequence 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎st ...
- TensorFlow 深度学习笔记 卷积神经网络
Convolutional Networks 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Is ...
- TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...
- TensorFlow深度学习笔记 循环神经网络实践
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...
- TensorFlow深度学习笔记 Tensorboard入门
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程: https://ww ...
- TensorFlow 深度学习笔记 从线性分类器到深度神经网络
转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 L ...
随机推荐
- [转]activiti5用户任务分配
用户任务分配办理人:1.用户任务可以直接分配给一个用户,这可以通过humanPerformer元素定义. humanPerformer定义需要一个 resourceAssignmentExpressi ...
- 【Tika基础教程之一】Tika基础教程
一.快速入门 1.Tika是一个用于文本解释的框架,其本身并不提供任何的库用于解释文本,而是调用各种各样的库,如POI,PDFBox等. 使用Tika,可以提取文件中的作者.标题.创建时间.正文等内容 ...
- AngularJs中关于ng-class的三种使用方式说明
在开发中我们通常会遇到一种需求:一个元素在不同的状态需要展现不同的样子. 而在这所谓的样子当然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性 这里有三种方法: 第一 ...
- 如何用EXCEL表计算今天是本年的第几周?
单元格内输入如下代码计算出来的数字即是当日在本年度的第几周,如下: =INT((TODAY()-DATE(YEAR(TODAY()),1,1)-WEEKDAY(DATE(YEAR(TODAY()),1 ...
- PHP学习笔记,curl,file_get_content,include和fopen四种方法获取远程文件速度测试.
这几天在做抓取.发现用PHP的file_get_contents函数来获取远程文件的过程中总是出现失败,并且效率很低下.所以就做了个测试的demo来测试下PHP中各种方法获取文件的速度. 程序里面使用 ...
- 初学swift笔记 结构体(八)
import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...
- ISP图像质量自动化测试方法
背景介绍 ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正.噪声去除.坏点去除.内插.白平衡.自动曝光控制等,依赖 ...
- Google机器学习笔记 4-5-6 分类器
转载请注明作者:梦里风林 Google Machine Learning Recipes 4 官方中文博客 - 视频地址 Github工程地址 https://github.com/ahangchen ...
- 构建混合云:配置Azure site to site VPN连接(2)
那么接下来的部分,我们开始正式配置S2S VPN: 首先配置本地网络,什么是本地网络呢?如果你在Azure上配置,本地网络意思是你自己的数据中心需要和Azure进行连接的网络段,而不是Azure上的网 ...
- haproxy redirect prefix
acl short_domain hdr(Host) -i etiantian.org redirect prefix http://www.etiantian.org code 301 if sho ...