简介

写在前面的话:
在进行深度学习的过程中,我们不可避免的需要了解和使用一些深度学习的框架,其中最有名的应该就是谷歌支持下的tensorflow深度学习框架了。
Tensorflow是一个使用数据流图 (data flow graphs) 技术来进行数值计算的开源软件库。

数据流图是是一个有向图,使用结点(一般用圆形或者方形描述,表示一个数学操作或者数据输入的起点和数据输出的终点)和线(表示数字、矩阵或者Tensor张量)来描述数学计算。数据流图可以方便的将各个节点分配到不同的计算设备上完成异步并行计算,适合大规模的机器学习应用。

第一次接触tensorflow,就会被它庞大而更新迭代快速的代码库所震惊,这里需要解释的是,在 TensorFlow 的官网上,它被定义为「一个用于机器智能的开源软件库」,也就是说,TensorFlow 是一个使用数据流图(data flow graphs)进行数值计算的开源软件库。他们没有将 TensorFlow 包含在「深度学习框架」范围内,而是和 Theano 一起被包含在「图编译器(graph compilers)」类别中。
Tensorflow以C API为边界可以分为前端系统(提供编程模型,负责构造计算图)和后端系统(提供运行环境,负责执行计算图):

我的感觉是 TensorFlow 是一个非常好的框架,但是却非常低层。使用 TensorFlow 需要编写大量的代码,你必须一遍又一遍地重新发明轮子。也因此,随着深度学习的发展和适用领域的扩展,在其上面的层上出现了更多的平台:Slim、PrettyTensor、Keras、TFLearn等等 。
这里我选择了TensorLayer,作为后来者居上的python包,它不仅上手快,例子多,且在运行速度、工程性和可拓展性上具有优秀的表现。
从安装到使用,作为一个新手,我出现了许许多多的问题,走了不少弯路,所以特此写下博客,给自己以警醒,也希望给后来者以建议和方向。

安装

1. CUDA和cuDNN

我选择安装的是tensorflow的GPU版本,因此需要提前预装CUDA和cuDNN,在这之前还需要确认你的显卡是否支持。这些都能够在tensorflow官方教程上找到,网上的各个版本都大同小异。
这里我遇见的问题是,虽然完全按照流程来,也添加了它们的路径,但是在最后测试中始终没办法调用GPU版本的tensorflow(每次import tensorflow都会报错)
网上针对这个问题解决的方法比较多,但是试过了基本都没有效果。最后发现了一个简单粗暴的解决方法:
直接把cuDNN的文件复制粘贴到CUDA的同名文件夹里,然后就可以解决调用问题了,亲测有效。

2.anaconda快捷安装和直接安装python

如果再给我一次选择机会的话,我会选择直接安装python。虽然网上说anaconda安装简洁,会附带很多安装包,界面友好诸如此类的,但是以下是我在使用过程中遇到过的几个问题。

  1. 自带的spyder风格比较类似matlab,对于科研工作者可能比较友好,对于更倾向于程序员的代码狗可能使用起来比较不便,而且我个人非常喜欢pycharm的界面更换功能,白色背景看久了会比较伤眼。

  2. anaconda自带版本的python目前是3.6(以后可能会更新),但是tensorflow目前仅支持3.5版本的python。所以直接使用anaconda的傻瓜安装以后(如果是新手可能不会一开始就考虑到版本兼容问题),会在安装tf的过程中报错,这时候一般有两个解决办法:第一个是重新安装3.5版本的anaconda,第二个是创建python=3.5的环境,在这个环境里安装tensorflow.

  3. 我选择的是比较方便快捷的第二种方法,直接新搭建了一个环境,基于python3.5,然后在这个基础上安装了tensorflow,但是在测试过程中始终报错(这里我安装的GPU版本,如果需求不大的话建议安装cpu版本,真的方便快捷好安装),这个时候用anaconda的不足之处就充分暴露出来了:大部分使用tensorflow的学习者都是直接安装的python或者在ubuntu环境下搭建的,所以针对anaconda遇到的tensorflow相关问题的解决方法真的非常非常的少,有时候同样的错误,解决问题的代码不能够通用,一些命令语句也不相同(pip和conda之间的区别)

    这里我遇到了很多问题,查了很多资料,几乎每个博主提到的解决方法我都尝试了一遍(但是真的资料非常的少),最后解决问题的方法是:把anaconda在python3.5的环境里直接重装了一遍。也就是这行代码:

create -n tensorflow python=3.5 anaconda

总结一下,这部分我走了很多弯路,最建议大家的是,直接安装python3.5,或者在3.5环境的anaconda里直接把它重装一遍。

用例

代码修改

正如上文所提到的,tensorflow是一个发展迅速且不断更新的学习框架,而在TensorFlow执行的过程中,也需要很多的依赖包,比如numpy,scipy,scikit-image,matplotlib和nltk等等,而这些依赖包本身的更新也是发展速度不一,进度不一致的。这也直接导致了,在使用TensorFlow的过程中,会不断地遇见因为版本不支持,或者接口有所改变,或者因为版本升级导致的代码不可用等等等等。
这里让我最为头疼的就是python2.x和python3之间的代码转换问题。
TensorFlow的官方教程里的所有测试用例,都是基于python2来的,而现在python2已经不再更新,取而代之的是python3,遵循学新不学旧的原则来说,我选择了基于python3.5的TensorFlow,但是在两个版本之间,无论是函数名、接口类、以及很多方面都发生了极其大的变化,这也导致了官方用例在实际操作的时候,运行不了的问题。
这里粘贴部分修改后的基于python3的代码,亲测可以运行:

官方的第一个测试用例:

import tensorflow as tf
import numpy as np# 使用 NumPy 生成假数据(phony data), 总共 100 个点.
x_data = np.float32(np.random.rand(2, 100)) # 随机输入
y_data = np.dot([0.100, 0.200], x_data) + 0.300# 构造一个线性模型
#
b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b# 最小化方差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)# 初始化变量
init = tf.global_variables_initializer()# 启动图 (graph)
sess = tf.Session()
sess.run(init)# 拟合平面
for step in range(0, 201):sess.run(train)if step % 20 == 0:print (step, sess.run(W), sess.run(b))# 得到最佳拟合结果 W: [[0.100  0.200]], b: [0.300]

官方的第二个测试用例(手写字符串识别):

# -*- coding: utf-8 -*-
import tensorflow as tf
import tensorlayer as tlsess = tf.InteractiveSession()# prepare data
X_train, y_train, X_val, y_val, X_test, y_test = \tl.files.load_mnist_dataset(shape=(-1,784))# define placeholder
x = tf.placeholder(tf.float32, shape=[None, 784], name='x')
y_ = tf.placeholder(tf.int64, shape=[None, ], name='y_')# define the network
network = tl.layers.InputLayer(x, name='input_layer')
network = tl.layers.DropoutLayer(network, keep=0.8, name='drop1')
network = tl.layers.DenseLayer(network, n_units=800,act = tf.nn.relu, name='relu1')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop2')
network = tl.layers.DenseLayer(network, n_units=800,act = tf.nn.relu, name='relu2')
network = tl.layers.DropoutLayer(network, keep=0.5, name='drop3')
# the softmax is implemented internally in tl.cost.cross_entropy(y, y_, 'cost') to
# speed up computation, so we use identity here.
# see tf.nn.sparse_softmax_cross_entropy_with_logits()
network = tl.layers.DenseLayer(network, n_units=10,act = tf.identity,name='output_layer')
# define cost function and metric.
y = network.outputs
cost = tl.cost.cross_entropy(y, y_, 'cost')
correct_prediction = tf.equal(tf.argmax(y, 1), y_)
acc = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
y_op = tf.argmax(tf.nn.softmax(y), 1)# define the optimizer
train_params = network.all_params
train_op = tf.train.AdamOptimizer(learning_rate=0.0001, beta1=0.9, beta2=0.999,epsilon=1e-08, use_locking=False).minimize(cost, var_list=train_params)# initialize all variables in the session
tl.layers.initialize_global_variables(sess)# print network information
network.print_params()
network.print_layers()# train the network
tl.utils.fit(sess, network, train_op, cost, X_train, y_train, x, y_,acc=acc, batch_size=500, n_epoch=500, print_freq=5,X_val=X_val, y_val=y_val, eval_train=False)# evaluation
tl.utils.test(sess, network, acc, X_test, y_test, x, y_, batch_size=None, cost=cost)# save the network to .npz file
tl.files.save_npz(network.all_params , name='model.npz')
sess.close()

在这里我遇到了这样一个问题:
RuntimeError: module compiled against API version 0xb but this version of numpy is 0xa

也就是提示我API接口的版本和numpy的版本不对应。这里需要uninstall numpy然后重新安装,如果不成功的话尝试重启编译器或者电脑,如果依旧不成功的话,可能就是电脑里有numpy的两个版本,然后Spyder默认使用了旧版本,就需要删除指定版本的numpy然后重新安装新版本(这里我没有遇到,应该是我直接懒汉安装,在3.5的环境里重新安装了anaconda的原因,所以直接uninstall就可以)

在这里就会直接暴露出来一个前面提到的问题,网上这方面anaconda的解决方式不多,大部分的pip命令在conda里修改了都不能用,所以遇见问题的话解决起来真的很麻烦,强烈安利大家还是在Ubuntu下直接安装python会比较友好。

PS:写到这里的时候在tensorflow的实践教程里发现了这个小例子:
引入tensorflow库并查看版本,确保已安装最新的稳定版(如1.2.1)。

from __future__ import print_function, division
import tensorflow as tfprint('Loaded TF version', tf.__version__)# Output: Loaded TF version 1.2.1  

为了兼容Python2和Python3的print和division函数,建议每个使用到的文件都引入from future
import print_function, division

不知道能不能python版本兼容的问题,会在后面的继续学习中补充。

下一部分会写的内容有以下一些:

GitHub desktop的使用方法(会极大的提高看代码和写代码以及clone代码库的速度)

相关文档的深入学习:
链接如下
1. TensorFlow官方教程:
2. tensorlyer的官方文档:

xgboostan傻瓜安装

anaconda search -t conda xgboost

conda install -c mndrake xgboost

TF新手使用教程(一)相关推荐

  1. kaggle新手实战教程

    kaggle新手实战教程 本教程将以Kaggle上的PUBG竞赛为例,提供从kaggle项目的启动到提交成绩的完整流程,希望对首次接触者有所帮助 1.新建notebook 首先进入Kaggle-PUB ...

  2. 【LaTeX】E喵的LaTeX新手入门教程(4)图表

    这里说的不是用LaTeX画图,而是插入已经画好的图片..想看画图可以把滚动条拉到底.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基 ...

  3. 想学python都要下载什么软件-学编程闲余时间建议下载的软件_Python新手入门教程...

    原标题:学编程闲余时间建议下载的软件_Python新手入门教程 Python新手入门教程_在手机上就能学习编程的软件 很多小伙伴会问:我在学编程,想利用坐地铁坐公交吃饭间隙学编程,在手机上能学编程的软 ...

  4. 编程入门python语言是多大孩子学的-不学点编程,将来怎么给孩子辅导作业―Python新手入门教程...

    为了填满AI时代的人才缺口,编程语言教育都从娃娃抓起了!如果你还不懂Python是什么将来怎么给孩子辅导作业呢? Python新手入门教程 近期,浙江省信息技术课程改革方案出台,Python言语现已断 ...

  5. python新手入门教程-终于知晓python新手练习教程

    Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.作为今年来越来越流行的语言,我们该如何学习或者转行学习Python呢,这里小迹为大家介绍如何入门学习Python.以下是小编为你整理 ...

  6. Android新手系列教程(申明:来源于网络)

    Android新手系列教程(申明:来源于网络) 地址:http://blog.csdn.net/column/details/androidcoder666.html 转载于:https://www. ...

  7. 【LaTeX】E喵的LaTeX新手入门教程(6)中文

    假期玩得有点凶 ._.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基础排版  [LaTeX]E喵的LaTeX新手入门教程(3)数学 ...

  8. 【LaTeX】E喵的LaTeX新手入门教程(5)参考文献、文档组织

    这不是最后一篇,明天开始建模所以会从6号开始继续更新.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基础排版  [LaTeX]E喵的 ...

  9. 【LaTeX】E喵的LaTeX新手入门教程(3)数学公式

    昨天熄灯了真是坑爹.前情回顾[LaTeX]E喵的LaTeX新手入门教程(1)准备篇  [LaTeX]E喵的LaTeX新手入门教程(2)基础排版上一期测试答案1.大家一开始想到的肯定是\LaTeX{}e ...

最新文章

  1. 使用VC实现一个“智能”自增减线程池
  2. iOS HitTest 机制
  3. wasserstein距离_EMD(earth mover#x27;s distances)距离
  4. Python IDE专用编辑器PyCharm下载及配置安装过程(Ubuntu环境)
  5. 洛谷 P1004 方格取数 【多线程DP/四维DP/】
  6. JAVA Spring 事物 ( 已转账为例 ) 基于 AOP 注解
  7. 迷你世界电锯机器人_迷你世界:石像机器人升级版,制作如此简单!
  8. intellij idea主题
  9. Flutter基础—定位对齐之大小比例
  10. 使用 Docker Machine 添加机器记录
  11. 矩阵求逆 —— 初等变换法(高斯-约旦消元)
  12. 将已购买的知乎Live课堂图片下载并导出的教程
  13. 什么是SD-WAN?网络技术科普
  14. 利用Python进行数据分析的学习笔记——chap9
  15. [DP] UOJ #311. 【UNR #2】积劳成疾
  16. 鸿蒙手机分身,小米详解MIUI 8手机分身:相当于开启了两个平行空间
  17. 74ls161中rco是什么_【别找了全在这】硬件工程师经典笔试题集锦!
  18. python爬虫,站长之家
  19. 5.IP地址介绍及VLSM
  20. RSA常见攻击方式(西电网信密码学大作业)

热门文章

  1. 服务器win10系统安装6,win10服务器远程安装系统
  2. spring-boot项目:MySQLSyntaxErrorException: Table ‘spring_boot.user‘ doesn‘t exist
  3. Python: 学习系列之七:模块、PIPY及Anaconda
  4. 【Kmeans】k均值聚类案例演示
  5. POI插入图片的时候,使用resize函数还是变形的问题
  6. 5张图教你学会Redis 持久化机制
  7. 一个出轨女人与佛的对话!
  8. CSS:宽高自适应详解
  9. win11设备管理器找不到端口及串口线无法识别
  10. 面向对象:统一建模语言(UML)