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页上>>>点击查看

按照官方的流程装就好了,这里讲一下几种方式的特点:

  1. pip: 安装在全局的python解释器中,简单
  2. Third party: Virtualenv, Anaconda and Docker:都能创建tensorflow独立的编译环境,但就是多了一份包
  3. 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 深度学习笔记 逻辑回归 实践篇的更多相关文章

  1. Google TensorFlow深度学习笔记

    Google Deep Learning Notes Google 深度学习笔记 由于谷歌机器学习教程更新太慢,所以一边学习Deep Learning教程,经常总结是个好习惯,笔记目录奉上. Gith ...

  2. 深度学习之逻辑回归的实现 -- sigmoid

    1 什么是逻辑回归 1.1逻辑回归与线性回归的区别: 线性回归预测的是一个连续的值,不论是单变量还是多变量(比如多层感知器),他都返回的是一个连续的值,放在图中就是条连续的曲线,他常用来表示的数学方法 ...

  3. TensorFlow——深度学习笔记

    深度学习与传统机器学习的区别 传统机器学习输入的特征为人工提取的特征,例如人的身高.体重等,深度学习则不然,它接收的是基础特征,例如图片像素等,通过多层复杂特征提取获得. 深度学习.人工智能.机器学习 ...

  4. TensorFlow深度学习笔记 文本与序列的深度模型

    Deep Models for Text and Sequence 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎st ...

  5. TensorFlow 深度学习笔记 卷积神经网络

    Convolutional Networks 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Is ...

  6. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...

  7. TensorFlow深度学习笔记 循环神经网络实践

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...

  8. TensorFlow深度学习笔记 Tensorboard入门

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程: https://ww ...

  9. TensorFlow 深度学习笔记 从线性分类器到深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 L ...

随机推荐

  1. python给多个发送邮件附件,参考于《python自动化运维》

    #!/usr/bin/env python #coding: utf-8 #author:luodi date:2015/02/12 #description:this is a send mail ...

  2. 安装weblogic的步骤10.3.0.0

    一.安装前的注意事项: weblogic在安装前必须要有对应的jdk支持weblogic的运行.所以在安装之前一定要根据本机上安装的jdk来选择安装的weblgoic的什么版本.因为weblogic的 ...

  3. JSON之三:获取JSON文本并解释(以google的天气API为例)

    google提供了天气的api,以广州天气为例,地址为: http://api.openweathermap.org/data/2.5/weather?q=guangzhou 返回的结果为: {   ...

  4. MVC模式下如何对多选框数据进行增删改查

    一.业务情景:      做的是一个项目管理的增删改查模块,一个项目里面有项目成员属性,而且一个项目可以有多个成员,一个成员可以参加多个项目,多对多关系,数据库表里自然要建立一个关系表. 视图 二.视 ...

  5. c#局域网聊天软件的实现

    本软件是基于大学寝室局域网聊天的思路.c#源代码如下: using System; using System.Drawing; using System.Collections; using Syst ...

  6. 今日哈工大刷推荐python脚本

    import httplib import random import time import urllib2 import re address = raw_input("Please i ...

  7. 水池(DFS)

    水池数目 点我 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中 ...

  8. Mfgtool

    For bootstrap mode, it refers to the communcation between the host and ROM codes through serial down ...

  9. 1.C语言关键字(auto break case char const swtich)

    ANSI C标准C语言共有32个关键字,分别为: auto break case char const continue default do double else enum extern floa ...

  10. Div+Css(一)必备知识

    我只积累我不知道的 参考链接 http://www.kwstu.com/ArticleView/divcss_201442291125960 http://www.kwstu.com/ArticleV ...