前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经网络来处理相同的数据集 - CIFAR10,来看下准确率能达到多少。
本文代码基于 TensorFlow 的官方文档 做了些许修改,完整代码及结果图片可从 这里 下载。
这篇 文章是对本文的一个升级,增加了 TensorBoard 的实现,可以在浏览器中查看可视化结果,包括准确率、损失、计算图、训练时间和内存信息等。
阅读全文前面 有篇博文讲了多层感知器,也就是一般的前馈神经网络,文章里使用 CIFAR10 数据集得到的测试准确率是 46.98%。今天我们使用更适合处理图像的卷积神经网络来处理相同的数据集 - CIFAR10,来看下准确率能达到多少。
本文代码基于 TensorFlow 的官方文档 做了些许修改,完整代码及结果图片可从 这里 下载。
这篇 文章是对本文的一个升级,增加了 TensorBoard 的实现,可以在浏览器中查看可视化结果,包括准确率、损失、计算图、训练时间和内存信息等。
阅读全文主成分分析(PCA)是一种常用的数据降维方法,可以将高维数据在二维或者三维可视化呈现。具体原理我在这里就不再详述,网上有很多教程都不错,可以参考 这里 或者 PCA 的维基百科页面。
阅读全文之前 写过一篇在 ubuntu 下安装 TensorFlow 的教程,那个时候 TensorFlow 官方还不支持 Windows 系统,虽然可以通过其他方法安装,但是终究不是原生的,而且安装过程繁琐易错。好消息是,Google官方在11月29号的开发者博客中宣布新的版本(0.12)将 增加对Windows的支持,我11月30号知道的,立马就安装试了试,安装过程非常简单,不过也有一些需要手动调整。
这里我会列出对本文的更新。
Cannot remove entries from nonexistent file
的解决办法。ImportError: DLL load failed: 找不到指定的模块。
、ImportError: No module named '_pywrap_tensorflow_internal'
和 ImportError: No module named 'tensorflow.python.pywrap_tensorflow_internal
的时候` 的解决办法。TensorFlow 有两个版本:CPU 版本和 GPU 版本。GPU 版本需要 CUDA 和 cuDNN 的支持,CPU 版本不需要。如果你要安装 GPU 版本,请先确认你的显卡支持 CUDA。我安装的是 GPU 版本,采用 pip 安装方式,所以就以 GPU 安装为例,CPU 版本只不过不需要安装 CUDA 和 cuDNN。
pip -V
查看当前 pip
版本,用 python -m pip install -U pip
升级pip
。此外,建议安装 Anaconda,因为这个集成了很多科学计算所必需的库,能够避免很多依赖问题,安装教程可以参考 这里。
以上条件符合,那么恭喜你可以开始下载 CUDA 和 cuDNN 的安装包了,注意版本号会由于 TensorFlow 不同版本有变化,此处请结合下面的安装 CUDA 和安装 cuDNN 说明)。
由于 Google 那帮人已经把 TensorFlow 打成了一个 pip 安装包,所以现在可以用正常安装包的方式安装 TensorFlow 了,就是进入命令行执行下面这一条简单的语句:1
2
3
4
5# GPU版本
pip3 install --upgrade tensorflow-gpu
# CPU版本
pip3 install --upgrade tensorflow
然后就开始安装了,速度视网速而定。
安装网之后你试着在 Python 中import tensorflow
会告诉你没有找到 CUDA 和 cuDNN,所以下一步就是安装这两个东西。
- TensorFlow 1.6:CUDA 9.0
- TensorFlow 1.13.1:CUDA 10.0
这个也是很简单的,首先根据上面的版本去官网下载对应的安装包(~ 1.4 GB)。下载完那个 exe 文件就是 CUDA 的安装程序,直接双击执行就可以了,就像安装正常的其他软件一样,安装过程屏幕可能会闪烁,不要紧,而且安装时间有点长。
安装完之后系统变量会自动为你添加上,这个不用管。
测试一下是否安装成功,命令行输入 nvcc -V
,看到版本信息就表示安装成功了。
前面提到了使用 TensorFlow
进行线性回归以及学习率、迭代次数和初始化方式对准确率的影响,这次来谈一下如何使用 TensorFlow
进行 Logistics Regression(以下简称 LR)。关于LR的理论内容我就不再赘述了,网上有很多资料讲,这里我就写下 LR 所用的损失函数:
其实整个程序下来和线性回归差不多,只不过是损失函数的定义不一样了,当然数据也不一样了,一个是用于回归的,一个是用于分类的。
数据集不再是经典的MNIST
数据集,而是我在UCI上找的用于二分类的数据集,因为我觉得老用经典的数据集不能很好的理解整个程序。数据集可以从这里下载,数据集是关于房屋居住的,给出一些影响房屋居住的因素和是否居住(二分类),例如光照、温度等。数据集有3个txt文件,本篇使用的是datatraining.txt
,数据量是8143×7,删除日期数据,然后按照75:25
的比例拆分成训练集和测试集,然后做一些必要的reshape
。
数据集大致是这样子的:
1 | from __future__ import print_function, division |
1 | Epoch: 0001 cost= 0.402052676091 |
可以看到最终准确率达到了97%,这里注意标签要进行one-hot
编码。
我用相同的数据集使用sklearn
实现了LR,
1 | clf = LogisticRegression() |
结果准确率是0.98624754420432215,而且训练时间大为缩短。
想必学过机器学习的人都知道,学习率、训练迭代次数和模型参数的初始化方式都对模型最后的准确率有一定的影响,那么影响到底有多大呢?
我初步做了个实验,在 TensorFlow
框架下使用 Logistics Regression 对经典的 MNIST
数据集进行分类。
使用sklearn
库可以很方便的实现各种基本的机器学习算法,例如今天说的逻辑斯谛回归(Logistic Regression),我在实现完之后,可能陷入代码太久,忘记基本的算法原理了,突然想不到 coef_
和 intercept_
具体是代表什么意思了,就是具体到公式中的哪个字母,虽然总体知道代表的是模型参数。
阅读全文
今天来说一下机器学习库 TensorFlow 的在 Ubuntu14.04 64位下的安装。
阅读全文在亚马逊上买了Peter Flach教授写的段菲博士翻译的《机器学习》一书,开始机器学习之旅。开始之前,先介绍下Peter Flach教授:
阅读全文
NLP and Python developer, sometimes datavis, he/him. Stick to what you believe.
author.job