Tensorflow学习笔记之一 —— 基础知识篇
来源:互联网 发布:数控编程g83 编辑:程序博客网 时间:2024/06/05 15:43
这是个人的第一篇博客。开博客的初衷,在于记录自己未来三年的学习进度、过程。
两月前开始接触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_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)import tensorflow as tfx = 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 行 对应于取值运算的环节。
先写到这里。第一次写这类博客,不足与错误之处,希望大家多多给予宝贵意见,谢谢。
- Tensorflow学习笔记之一 —— 基础知识篇
- TensorFlow学习笔记之一——初步印象
- 多线程编程学习笔记之一——基础知识
- tensorflow学习笔记(三):tensorflow 基础知识
- Tensorflow学习笔记(一):基础知识
- TensorFlow 基础知识(笔记)
- 《HTML5学习笔记—基础知识》
- Spring学习笔记—基础知识
- 《嵌入式系统设计师》笔记之一——嵌入式系统基础知识
- tensorflow学习笔记(一)——tensorflow基本使用
- Tensorflow基础知识学习
- Tensorflow——学习笔记(1)
- Tensorflow学习笔记——深入MNIST
- Tensorflow学习笔记——word2vec
- Oracle基础知识笔记之一
- 学习STL之一 基础知识
- linux网络编程学习笔记之一 -----各种基础知识小结
- C++学习笔记(第一章 C++的基础知识 之一)
- jQuery中的height()、innerheight()、outerheight()的区别总结
- JavaScript interval 的一个坑 : 重新赋值 interval 如果前一个没有关闭, 那将会一直执行!
- 热修复Tinker快速集成
- Oracle SQL层次查询、Hierarchical Queries、connecty by
- Highcharts :Uncaught TypeError: $(…).highcharts is not a function
- Tensorflow学习笔记之一 —— 基础知识篇
- 虚拟机安装CentOs系统出现license information后操作步骤
- jQuery实现表格的隔行换色
- nginx实现请求转发
- DOM事件
- 14位Imei生成15位-java版
- 初学vue遇到的坑(一)
- spring事务 只需要datasource 就可以的注解式配置
- LabVIEW自带函数实现SQL Server操作(上)