如何高效的学习TensorFlow代码?

如题,或者如何掌握TensorFlow,应用到任何领域?
添加评论分享

10 个回答

爱琳李,老李,明天就辍学了
8 人赞同

本来都忘了这个问题了,不过看到很多人也在关注,也是开森。

我补充一个连接: https://www.udacity.com/course/viewer#!/c-ud730/l-6370362152/m-6379811815 这个是Udacity 谷歌给的deep learning 课程,代码就在tensorflow源码里面。几个作业很有趣。课程画风很可爱,主要是跟着官方Tensorflow的习惯来的,讲解理论的时候会比较照顾得到,比如CNN部分的padding什么的命名都是严格按照TF方法里的标准。
不过建议大家不要把这门课用来入门上手,理论部分讲解的可能不适合入门级。作业代码可能也需要花点时间去理解。

我也放个blog地址,初学者欢迎大家交流评论:https://ireneli.eu/

8编辑于 昨天 20:10添加评论感谢
•作者保留权利
小乖他爹,技术管理/文字/阅读/户外/酒
19 人赞同

也在学习中。
个人感觉先把TensorFlow的白皮书:http://download.tensorflow.org/paper/whitepaper2015.pdf
这个论文整明白了,大致模型就明白了。然后学习demo。最后再深入整个代码。
白皮书有个快翻译完的中文版:[译] TensorFlow 白皮书
------------------------------------------------------------------------------------------------------------
最近陆续更新了一些学习笔记,与初学者共享:
SHINING的博客
19编辑于 2016-05-117 条评论感谢
•作者保留权利
tobe,contributor to the world
2 人赞同

回来补充下,给一个学习线路:

  1. 看Paper,了解TensorFlow核心概念
  2. 看官方文档,了解Usage
  3. 参照文档写Demo
  4. 使用TensorBoard加深印象
  5. 搭建分布式TensorFlow
  6. 学习深度学习算法
  7. 写更多的Demo
  8. 学更多的深度学习算法
  9. 写更多的Demo
  10. 参与TensorFlow社区讨论
  11. 看TensorFlow源码
2编辑于 2016-06-22添加评论感谢
•作者保留权利
王买买提,不会写iOS的算法工程师不是一个好厨子
3 人赞同

First Contact With TensorFlow,和TensorFlow官方文档中文版_TensorFlow中文教程_TensorFlow开发中文手册[PDF]下载
入门最佳拿好不谢
3编辑于 2016-05-15添加评论感谢
•作者保留权利
morvan,机器学习摸索撞墙多了
9 人赞同

我有在制作专门针对 Tensorflow 的学习视频,从每一个重要的元素开始讲起.一级级上升.
你可以看看我这个播放列表:
莫烦 tensorflow 神经网络 教程
基本上每一个练习你都能在下面的视频描述里找到代码链接,方便你自己的学习.
之前在 youtube 上发了以后收到很多赞同,所以就再传到优酷里了.希望能帮助到大家的学习.
我在 youtube 的频道: https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg
我的频道里还有一些关于机器学习的视频教程.
谢谢关注和分享~
9编辑于 2016-06-257 条评论感谢
•作者保留权利
思怅,Mechanical Design/Robotics/Computer Vi…
2 人赞同

我最近在使用Tensorflow。为此,我换上了ubuntu,用上了python。总的来说,在了解了神经网络等基本内容之后,再看官方教程比较容易懂。仅就代码而言,如果已经熟悉python,那么看不懂的地方查看API即可。我个人觉得开始时最大的难点在于Tensor维度的设计,整个系统的运行机理,以及数据的输入。先搞懂这几块,应该之后学起来快一些。
2发布于 2016-04-038 条评论感谢
•作者保留权利
乔海军,互联网的小虫子
1 人赞同

可以自己从源码来部署一遍。

然后就是从简单的例子开始学习。

我主要再用mxnet,拿这两者来比较,从比较中可以学到不少东西。

补充一下

tf和mxnet架构极为相似,或者说是英雄所见略同吧

1编辑于 2016-06-102 条评论感谢
•作者保留权利
Aitian Ma
2 人赞同

可以看这里翻译的教程哦 Google开源深度学习框架Tensorflow进行mnist数据训练初学

本文写给机器学习和tensorflow的初学者。如果你已经知道mnist,softmax(multinomial logistic)regression,你可以会想看这个faster paced tutorial.不过,首先得确认你已经 install TensorFlow .

初学编程,一般都会学习写一个“hello world!”的程序,MNIST就相当于机器学习领域的“hello world!”

MNIST是一个机器图像数据集。它包含像下面的一些手写的数据图像:

它还包括了每个图像的数字标签。例如,上面的图片的标签是 5、0、 4 和 1。

在本教程中,我们要训练一个模型来识别图像并预测他们是什么数字。我们的目标不是训练一个真的精准的模型,达到极强的性能 — — 虽然我们以后会给你代码来做到 !— — 而是要以之为引字让大家初步了解如何使用TensorFlow。因此,我们要开始与一个非常简单的模型,称为 Softmax 回归。

在本教程中的实际代码是非常短的和所有有趣的事情发生只需要三行代码。然而,了解其背后的理念很重要 ︰ TensorFlow 的工作原理和核心机器学习的概念。正因为如此,我们要非常认真地学习这些代码。

The MNIST Data

MNIST 数据Yann LeCun's website网站上。为了方便,我们已经包括一些 python 代码来自动下载并安装数据。你可以要么下载的代码和将其导入如下,或简单地复制并粘贴它。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

下载数据分割成三个部分,55,000 的数据点的训练数据 (mnist.train)、 10000 个点的测试数据 (mnist.test) 和 5000 点的验证数据 (mnist.validation)。这种分割是非常重要 ︰ 机器学习中测试数据非常重要,通过它我们才可以验证学到的知识是可以泛化的 !

正如前面提到的每个 MNIST 数据点有两个部分 ︰ 图像的手写的数字和相应的标签。我们将调用图像"xs"和标签"ys"。训练集和测试集包含 x 和 y 们,例如训练图像是 mnist.train.images 训练的标签是 mnist.train.labels。

每个图像是 28 x 28 像素。我们可以把这解读为一大系列的数字 ︰

我们可以把这些数据变成一个 28 × 28 = 784 矢量数组。我们如何拼合数组并不重要,只要所有的图像都一致。从这个角度来看,MNIST 图像都只是一堆784三维向量空间,有很丰富结构 (警告 ︰ 计算密集型的可视化效果)。
扁平数据扔掉图像的二维结构有关的信息。不会很糟糕吗?嗯,最好的计算机视觉方法会利用这种结构,我们将在以后的教程中提到。我们在这里用到的简单方法,使用 softmax 回归,则不会关注这些结构。

其结果是,mnist.train.images 是一个形状 [55000,784]的张量(n 维数组)。第一维是图像和第二个维度是每个图像的像素。在张量的每个条目是 0 和 1 之间,为某个特定的图像中像素点的像素强度。

MNIST 中的相应标签是数字 0 至 9,描述给定的图像是哪个数字。出于本教程的目的,我们要想我们作为一个"one-hot"的标签。one-hot矢量是一个由多个0和一个1组成的向量。在这种情况下,第 n 个数字将被表示为一个向量中第 n 个元素为1。例如,3 将是[0,0,0,1,0,0,0,0,0,0]。这样,mnist.train.labels 是 [55000,10]阵列的浮点数。

现在我们就可以真正开始建立我们的模型了!

Softmax Regressions
我们知道,在 MNIST 中的每个图像是一个数字,无论是零或九。我们想要能够通过一张图片,给它是每个数字的概率。例如,我们的模型可能看到了九的图片并给出 80%的概率它是一个九,但给出它可以是5%是八的可能性 (因为顶层循环) 和极小的概率它可能是所有其他数字。

这是一个经典的案例,其中 softmax 回归是一个自然、 简单的模型。如果你想要将概率分配给一个或者几个不同的可能时,softmax 就可以完成这样的事情。甚至后来,当我们训练更复杂的模型,最后一步也将是softmax一层。

Softmax 回归有两个步骤 ︰ 首先我们要把这些输入的特征加起来,然后我们将这些特征转换成概率。

为了总结了给定的图像的特征,我们把这些像素强度做加权求和。权重的大小表明该特征在确定它为正确分类时候的作用大小。

下面的关系图显示了学到的每个类的权重一个模型。红色代表负的权重,而蓝色表示正的权重。

We also add some extra evidence called a bias. Basically, we want to be able to say that some things are more likely independent of the input. The result is that the evidence for a class i given an input x is:

我们还添加了一些额外的证据,被称为一种偏见。基本上,就指独立于输入的特征。结果是对于i这一类据,我给出了输入 x,结果就是︰

evidencei=∑jWi, jxj+bi

其中Wi是权重,bi是类i的偏见,,j是输入x像素。我们可以通过softmax函数把这些变成预测的概率如下:

y=softmax(evidence)

这里 softmax 担任"激活"或"链接"的功能,把我们的线性函数输出变成我们想要的结果 — — 在这种情况下,概率分布为 10 例。你可以认为它是把输入的证据转换成可能是某一类的可能性。它被定义为 ︰

softmax(x)=normalize(exp⁡(x))

展开方程你会得到如下的公式:

softmax(x)i=exp⁡(xi)/∑jexp⁡(xj)

通常以第一种方式看 softmax︰指数化输入,然后正则化输出。指数化意味着更多的输入特征会指数级增加其权重。相反,较少单元特征会让假设中获得其权重的一小部分。假设分类不会有0或者负的权重。Softmax然后正则化这些权重,以便他们相加为一,形成一个有效的概率分布。(若要了解更多关于softmax 函数的内容,参见 section 它迈克尔 · 尼尔森书,完整的交互式可视化中一节)。

你能想象 softmax 回归作为类似下面的内容,虽然现实中会有更多的 xs。对于每个输出,我们计算 xs 的加权的和,添加一个bias,然后应用 softmax。

如果把它写成方程,就可以得到 :

然后我们可以把这个过程“标量化”,变成矩阵相乘和向量相加。这会让计算更加快速。(也是一种简化思考的方法)

更加简化一下,我们可以把它写成:

y=softmax(Wx+b)
进行回归
要在Python中做到快速数值计算,我们通常使用像 NumPy 做矩阵乘法,然后使用python之外的另一种语言实现的高效代码的库。不幸的是和Pyhton操作的切换间仍有很大的开销。这种开销是尤其糟糕,如果你想要在 Gpu 上或以分布式的方式运行。这种方法下数据传输的成本会比较高。
TensorFlow 也是在 python之外做这些繁重的计算,但它更进一步,从而避免这种开销。不是用python以外的语言独立运行单个昂贵的操作,TensorFlow让我们通过图描述的方式完全从外部运行python的交互操作。(可以在几个机器学习库中看到像这样的方法)。

若要使用 TensorFlow,我们需要将其导入。

import tensorflow as tf

这些交互式的操作需要符号变量。我们先来创建一个:

x = tf.placeholder(tf.float32, [None, 784])

x并不是一个特定的值,它是一个placeholder,一个我们需要输入数值当我们需要tensorflow进行运算时。我们想要输入任意数量的mnist图片,每一个都展开成一个784维的向量。我们用一个二维的[None, 784]浮点张量代表。 (这里的None表示维度可以是任意的长度.)

我们的模型中也需要权重和bias。我们可以把它们看成是额外的输入,Tensorflow有更加好的方法来表示它: Variable. Variable是一个Tensorflow图交互操作中一个可以修改的张量。 它可以在计算中修改。对于机器学习的,一般都有一些Variable模型参数。

W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))

我们通过给 tf.Variable 来创建这些变量。下面这种情况,我们将初始化 W 和 b 为全零的张量。因为我们将要学习 W 和 b,所以他们初始值是什么都没关系。

注意,W 的形状 [784,10] ,是因为我们想要 784 三维图像向量乘以它输出10 维向量以标识的不同类。b形状是 [10],这样我们可以将其和输出相加。

现在,我们可以实现我们的模型。它只需要一行代码 !

y = tf.nn.softmax(tf.matmul(x, W) + b)

首先,我们通过tf.matmul (x,W)来把x和W相乘。这和我们的方程中看到的顺序是相反的,在那里面是Wx。然后加上b,最后应用 tf.nn.softmax。

就是这样。我们只花了一行代码来定义我们的模型。不是因为 TensorFlow 旨在简化 softmax 回归︰ 它只是想通过非常灵活的方式来描述很多各种各样的数值计算,从机器学习模型到物理模拟。定义后,可以在不同的设备上运行我们的模型︰您的计算机的CPU、Gpu、甚至手机 !

训练
为了训练我们的模型,我们需要定义怎么样的模型才是好的。嗯,实际上,在机器学习中我们通常会为模型定义怎么样是坏的称为成本或损失,然后再试,尽量最小化这个成本或者损失。但两者是等同的。

一个很常见的很好的成本函数是"cross-entropy交叉熵"。出人意料的是,交叉熵虽然产生于对信息压缩码信息理论的思考,但它最终被在很多方面,从赌博到机器学习。它的定义是︰

Hy′(y)=−∑iyi′log⁡(yi)

这里y是我们预测的概率分布,而y′ 是真正的分布(那个我们要输入的one-hot标题).某种理解下,交叉熵可以衡量我们的预测是多少的低效。本文不会更加详细地深入交叉熵,但它很值得去理解-> understanding.

为了使用交叉熵,我们要先增加一个新的placeholder来放正确的结果:

y_ = tf.placeholder(tf.float32, [None, 10])

然后设置交叉熵, −∑y′log⁡(y):

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))

首先,tf.log 计算 y 的每个元素的对数。接下来,我们把y_乘以tf.log(y) 的相应元素的每个元素。然后 tf.reduce_sum y。最后,tf.reduce_mean 在批处理中计算所有示例平均值。

现在,我们知道我们想要我们的模型做什么,它是很容易通过 TensorFlow 去训练它。因为TensorFlow 了解整个图的计算,它可以自动使用反向传播算法有效地确定你的变量是如何影响成本函数并把它最小化。然后,它可以应用您所选择的优化算法来修改变量和降低成本函数。

train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

本例子中,我们通过TensorFlow使用学习率为 0.5的梯度下降算法尽量减少 cross_entropy 。梯度下降是一个简单的程序,其中TensorFlow 会调整每个变量点从而使之向降低成本的方向运动。但 TensorFlow 还提供了许多其它优化算法︰使用它简单到只需要一行代码。
TensorFlow 实际上做什么在这里,在幕后,是它向你执行反向传播和梯度下降的图表添加新操作。然后它给你回到单个操作,当运行时,会做一步的梯度下降法训练,微调一下您的变量,以降低成本。

现在,我们设置好了我们的模型。最后一件事在我们启动它之前,我们要添加一个操作来初始化我们创建的变量︰

init = tf.initialize_all_variables()

现在我们可以启动一个会话,然后运行初始化变量的操作:

sess = tf.Session()
sess.run(init)

训练走起来-- 我们要进行1000次这样的训练!

for i in range(1000):batch_xs, batch_ys = mnist.train.next_batch(100)sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

Each step of the loop, we get a "batch" of one hundred random data points from our training set. We runtrain_step feeding in the batches data to replace the placeholders.

Using small batches of random data is called stochastic training -- in this case, stochastic gradient descent. Ideally, we'd like to use all our data for every step of training because that would give us a better sense of what we should be doing, but that's expensive. So, instead, we use a different subset every time. Doing this is cheap and has much of the same benefit.

在循环的每一步,我们从我们的训练集得到一百随机数据点"批处理"。我们运行 train_step 批次的数据来替换占位符。

使用随机数据进行小批量称为随机训练 — — 在这种情况下,随机的梯度下降法。理想情况下,我们想使用我们所有的数据训练的每一步,因为这会给我们感觉是更好的方法,但这样代价太大。相反,每次我们使用一个不同的子集,这样做代价更小而且可以达到相同的效果。

模型评价

How well does our model do?

Well, first let's figure out where we predicted the correct label. tf.argmax is an extremely useful function which gives you the index of the highest entry in a tensor along some axis. For example, tf.argmax(y,1) is the label our model thinks is most likely for each input, while tf.argmax(y_,1) is the correct label. We can use tf.equalto check if our prediction matches the truth.

我们的模型表现如何呢?

好吧,先让我们弄清楚我们预测正确的标签在哪里。tf.argmax 是项的极其有益的函数,它给返回在一个标题里最大值的索引。例如,tf.argmax(y,1) 是我们的模型输出的认为是最有可能是的那个值,而 tf.argmax(y_,1) 是正确的标签的标签。如果我们的预测与匹配真正的值,我们可以使用 tf.equal来检查。

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

这会返回我们一个布尔值的列表.为了确定哪些部分是正确的,我们要把它转换成浮点值,然后再示均值。 比如, [True, False, True, True] 会转换成 [1,0,1,1] ,从而它的准确率就是0.75.

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

最后我们在测试数据上求准确率的值:

print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))

应该会是大约 92%.

这样的结果是不是已经很好了呢?好吧,并不是真的。事实上,它糟糕透了。这是因为我们使用的一个非常简单的模型。一些小的变化,我们实事上可以达到 97%的准确率。最好的模型可以到达 99.7%以上精度 !(有关详细信息,看一看这结果列表-> list of results)。

然而重要的是我们学会了使用这个模型。不过,如果你对于这个结果还是不太满意,查阅the next tutorial我们通过一个教程和学习如何通过TensorFlow构建更复杂的模型,它会达到更高的精度哦!

欢迎访问网站:奇趣儿 – 到天边外去…

欢迎关注微信号:奇趣儿beta

欢迎扫描二维码:

2发布于 2016-06-02添加评论感谢
•作者保留权利
莫宇尘,maya再也不敢乱立flag了
2 人赞同

oop读代码作业要到ddl了,马克下等菊苣们|・ω・`)
2发布于 2016-04-25添加评论感谢
•作者保留权利
知乎用户,水可载舟,亦可赛艇。
1 人赞同

Tensorflow的确设计的不错,我的学习进度是先看demo对照demo查看文档。其实它和theano有需要相似之处,比如图计算模型,惰性计算,不过个人觉得要理解tensorfolw张量的模型特别重要,tensorflow seving构建需要谷歌的依赖,有大坑。

如何高效的学习TensorFlow代码?相关推荐

  1. 深度学习中滑动平均模型的作用、计算方法及tensorflow代码示例

    滑动平均模型: 用途:用于控制变量的更新幅度,使得模型在训练初期参数更新较快,在接近最优值处参数更新较慢,幅度较小 方式:主要通过不断更新衰减率来控制变量的更新幅度 衰减率计算公式 :     dec ...

  2. 【C++】如何阅读别人的代码?如何阅读别人的C++代码?如何高效学习他人代码

    [ C/C++ ] 程序学习--如何阅读别人的代码 ++++++++++++ 第一章: 导论 ++++++++++++ 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代 ...

  3. 怎样高效阅读一份深度学习项目代码?

    犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文.毕竟读代码嘛,大家可能都会读.而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度.但笔者还是决定大胆地写一点:就当是给自己设立今后读代码 ...

  4. 深度学习如何又好又快? Google发布最新《高效深度学习: 更小、更快、更好》综述...

    深度学习模型在实际生产系统中面临一系列问题,比如模型大小.训练时间等,本文这对深度学习的效率问题做了全面的综述,值得关注! 深度学习已经在计算机视觉.自然语言理解.语音识别.信息检索等领域掀起了一场革 ...

  5. 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))

    [神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...

  6. GitHub上共享的简单易用 TensorFlow 代码集

    最近来自韩国的AI研究科学家Junho Kim做了一份易于使用的 TensorFlow 代码集,目前该项目包含一般深度学习架构所需要的代码,例如初始化和正则化.各种卷积运算.基本网络架构与模块.损失函 ...

  7. 如何高效的学习掌握新技术

    最近一段时间,把React学习实践了一把,算是又多掌握了一门新技术,虽然学习过程比较辛苦曲折,但熟练掌握后感觉还是很好的,以后又多了一种选择,在技术思路上也开阔了很多. 回想编程生涯这些年,2001年 ...

  8. 生成对抗网络简介(包含TensorFlow代码示例)【翻译】

    判别模型 vs. 生成模型 示例:近似一维高斯分布 提高样本多样性 最后的思考 关于GAN的一些讨论 最近,大家对生成模型的兴趣又开始出现(OpenAI关于生成模型的案例).生成模型可以学习如何生成数 ...

  9. 【论文解读】DCN-M:Google提出改进版DCN,用于大规模排序系统的特征交叉学习(附代码)...

    " 本文结合DeepCTR-Torch中的代码实现,介绍了DCN的改进版--DCN-M.该模型能更有效地学习特征交叉,并通过低秩矩阵分解对参数矩阵进行降维,降低计算成本.受MOE结构启发,作 ...

最新文章

  1. 第十三章 簇-机器学习老师板书-斯坦福吴恩达教授
  2. ​​​​​​​CV:利用cv2(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5、性别hdf5)并标注
  3. 开博 即便网络工程师真的没落了,兴趣不是最重要的么?
  4. android USB host编程
  5. Oracle实现网吧计费系统,网吧计费管理系统 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  6. 【java基础知识】java分层思想
  7. MySQL中查某一字段包含某一字符的个数
  8. git 查看自己的用户名和邮箱
  9. 数据库系统概论思维导图
  10. 现金支票打印模板excel_Excel的正确使用技巧-Excel的提速大法
  11. Multimodal Fusion(多模态融合)
  12. =default =delete
  13. 新手学3D游戏建模,台式电脑要什么配置?笔记本又有什么推荐?
  14. 金庸秘笈英汉互译(zz)
  15. smarty中文帮助文档
  16. 讨论JAVA和QT之争
  17. 竟成408计算机考研辅导书介绍
  18. ICCV2021 语义分割相关论文集合推荐
  19. Charles 注册码
  20. 511遇见易语言数组加入成员

热门文章

  1. 在Java中,采用类的默认构造函数构造对象的方法!
  2. mysql 删除 修改数据库语句_数据库——添加,修改,删除
  3. Ubuntu 下Mysql常用命令
  4. leetcode算法题--“气球” 的最大数量
  5. leetcode算法题--从上到下打印二叉树 II
  6. 区分 UML 类图中的几种关系
  7. 注意ajax的同步和异步请求
  8. socket 编程入门教程(一)TCP server端:3、sockaddr与sockaddr_in
  9. 是技术还是态度,网易的视频Title
  10. Stack(栈)和Heap(堆)的区别