Tensorflow学习笔记之一 —— 基础知识篇

这是个人的第一篇博客。开博客的初衷,在于记录自己未来三年的学习进度、过程。

两月前开始接触Deep Learning和Tensorflow,目前和大师兄的‘’成果‘’:基于opencv导入图像数据并生成tfRecord文件,利用ImageNet提供的训练数据,结合Vgg网络完成了对小组内使用的数据集的分类。废话不多说,开始今天的正题。


1.首先是第一个问题,什么是Tensorflow?

它,是由Google开源的一个深度学习的强大模块。类比于C++中涉及的库(例如,STL、Opencv等)、Matlab中的工具箱、Java中的jar包。它对底层的一些细节进行了封装,如对函数的自行求导、分布式计算等等。我们只需知道去调用相应的方法进行操作,而不必去深究其具体的内部实现。

Tensorflow使用的是 数据流图(data flow graphs) 的方式来表示数值计算。数据流图是一张有向图,通过节点与边来描述整个计算过程。节点(Op)代表着各种输入、输出以及数学运算或操作;表示着节点之间的相互联系。节点与节点间传递的数据为多维数组或列表,即张量(Tensor)。Tensor在整张图中流动,故因此而被称为Tensorflow。



2.Tensorflow的工作原理

介绍完Tensorflow,接下来我们会进一步去说明它的工作原理。

(1)使用图(graphs)来表示计算任务

在这里以a+b的简单操作为例,直观的去展示Tensorflow如何以图来表示计算任务,代码如下:

node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0) #默认float32类型
node3 = tf.add(node1, node2)

其对应的图为


其结构有点像数据结构中的中序表达式树。


(2)使用张量(tensor)来表示数据

之前也提及过,张量(tensor)就是一个n维数组或列表。在Tensorflow中以这种数据结构去表示所有的数据,操作之间传递的数据也均为张量(tensor)。


(3)使用会话(session)来执行图

个人对这句话的理解是,Tensorflow对于图的构建和数值计算是分开的,基于python的tensorflow在上层构建出整个计算流程,而底层的计算仍是交由C/C++去完成的,session的作用就像是一座桥梁,连接起了整个操作,就像一个开关。在一些需要进行交互的环境下,一般会使用InteractiveSession去替代Session。


(4)使用变量(variables)来维护状态

上面提到的a+b过程,都是 常值张量(constant)。而在一些请况下,如线性回归y=wx+b中,w和b在计算过程中是需要去动态调整的,变量variables就是Tensorflow提供的对应于此种情况的。用可以保持或更新相应的参数,以维护整个图执行过程中的状态信息。


(5)使用供给(feeds)和取回(fetches)来传入和传出数据

此篇文章主要是介绍Tensorflow的基础知识,相关的数据的定义、输入输出操作及代码会在后续的博客中进一步介绍。



基于此,我们介绍完了Tensorflow。对于使用Tensorflow,整个过程可以概括为以下三个环节:
构建图  ——————>  启动图  ——————>  取值运算

在这里,我们引入了官网给出的一个小demo,去感受一下Tensorflow的整体布局。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
import tensorflow as tf
x = tf.placeholder(tf.float32, [None, 784])
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for i in range(10):
  print(i)
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))


这段代码实现的功能是对手写数字进行分类。我们的目的不是去设计一个很复杂的网络,而是要介绍下Tensorflow整个过程的三个环节。

对应这个教程的实现代码很短,我们对该代码进行分段。

代码 04-10 行   对应于构建图的环节,

代码 11-12 行   对应于启动图的环节,

代码 13-19 行   对应于取值运算的环节。



先写到这里。第一次写这类博客,不足与错误之处,希望大家多多给予宝贵意见,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值