Tensorflow是一个编程系统,使用图来表示计算任务,图中的节点被称为op(operation的缩写),一个op可以获得0个或多个Tensor,当这个op被执行的话,也可以产生0个或多个Tensor。每个Tensor是一个类型化的多维数组。例如你可以将一小组图像集表示为一个四维的浮点数数组,这四个维度分别是[batch, height, width, channels]。

一个TensorFlow图描述了计算的过程。为了进行计算,图必须在会话里面被启动。会话将op分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法。这些方法执行后,将产生的Tensor返回。在python里面,返回的是numpy ndarray对象;在C和C++语言中返回的tensor是tensorflow::tensor实例

在tensorflow中,程序的编写通常分为两步:1.构建阶段;2.执行阶段。在构建阶段op的执行过程被描述为一张图,在执行阶段,程序通过会话执行图中的op。总的来说就是,在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。

构建图

构建图的第一步,是创建源op。源op不需要任何输入,例如常量(constant),源op的输出被传递给其他op做运算。

在python库中,op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其他op构造器,作为输入。下面我们举例来说明一下。

首先我们需要导入tensorflow库:

import tensorflow as tf

之后的话我们创建一个常量op,产生一个1*2的矩阵[3,3]:

matrix1 = tf.constant([[3,3]])

我们再创建另外一个op,产生一个2*1的矩阵[[2], [2]]:

matrix2 = tf.constant([[2], [2]])

我们接下来创建一个矩阵乘法的op,将之前的op的输出作为当前op的输入:

product = tf.matmul(matrix1, matrix2)

这样的话我们就构建了一张图,这张图有三个节点:两个op和一个matmul op。如果我们将product打印出来的话,我们是得不到其运算后的结果的,得到如下所示结果:

如上图所示,我们得到的是一个Tensor。所以我们到目前为止只是构建了一张图,我们接下来还需要启动这张图,启动这张图的第一步是创建一个Session对象,如果我们不加入任何参数到里面的话,我们将会启动默认图。代码如下:

sess = tf.Session()

接下来的话我们就可以通过sess.run的方法来执行矩阵乘法的op。并且在任务完成之后,我们需要关闭会话。

result = sess.run(product)
print(result)
sess.close()

输出结果:

Session在调用完成之后我们需要关闭会话,释放资源。我们可以通过更加简单的方法来实现:

with tf.Session() as sess:result = sess.run(product)print(result)

总的代码如下所示:

import tensorflow as tf
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2], [2]])
product = tf.matmul(matrix1, matrix2)
# sess = tf.Session()
# result = sess.run(product)
# print(result)
# sess.close()
with tf.Session() as sess:result = sess.run(product)print(result)

在定义上,Tensorflow将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU),并且Tensorflow会自动选择CPU或者GPU来执行。

如果机器上有超过一个可用的 GPU, 除第一个外的其它 GPU 默认是不参与计算的. 为了让 TensorFlow 使用这些 GPU, 你必须将 op 明确指派给它们执行. with...Device 语句用来指派特定的 CPU 或 GPU 执行操作:

import tensorflow as tf
with tf.Session() as sess:with tf.device("/cpu:0"):matrix1 = tf.constant([[3, 3]])matrix2 = tf.constant([[2], [2]])product = tf.matmul(matrix1, matrix2)result = sess.run(product)print(result)

设备用字符串进行标识. 目前支持的设备包括:

• "/cpu:0" : 机器的 CPU.

• "/gpu:0" : 机器的第一个 GPU, 如果有的话.

• "/gpu:1" : 机器的第二个 GPU, 以此类推.

我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

Tensorflow官方文档学习理解 (一)相关推荐

  1. tensorflow学习笔记十7:tensorflow官方文档学习 How to Retrain Inception's Final Layer for New Categories

    现代物体识别模型有数以百万计的参数,可能需要数周才能完全训练.学习迁移是一个捷径,很多这样的工作,以充分的训练模式的一组类ImageNet技术,并从现有的权重进行新课.在这个例子中,我们将从头再训练最 ...

  2. TensorFlow官方文档中的sub 和mul中的函数已经在API中改名了

    照着tensorflow 官方文档学习tensorflow时,出现问题: 第一,执行程序 #进入一个交互式Tensorflow会话 import tensorflow as tf sess = tf. ...

  3. TensorFlow 官方文档中文版发布啦(持续维护)

    TensorFlow 是 Google 研发的第二代人工智能学习系统,是 Google 为了帮助全球开发者们更加方便和高效地开发机器学习 (Machine Learning)和人工智能 (AI) 应用 ...

  4. tensorflow官方文档_开源分享:最好的TensorFlow入门教程

    如果一门技术的学习曲线过于陡峭,那么我们在入门时的场景往往是,一鼓作气,没入门,再而衰,三而竭.演绎一出从入门到放弃的败走麦城. 今天发现一个入门TensorFlow的宝藏,迫不及待的分享给大家.这个 ...

  5. TensorFlow 官方文档中文版发布啦(持续维护) 1

    TensorFlow 是 Google 研发的第二代人工智能学习系统,是 Google 为了帮助全球开发者们更加方便和高效地开发机器学习 (Machine Learning)和人工智能 (AI) 应用 ...

  6. ZooKeeper官方文档学习笔记03-程序员指南03

    我的每一篇这种正经文章,都是我努力克制玩心的成果,我可太难了,和自己做斗争. ZooKeeper官方文档学习笔记04-程序员指南03 绑定 Java绑定 客户端配置参数 C绑定 陷阱: 常见问题及故障 ...

  7. ZooKeeper官方文档学习笔记01-zookeeper概述

    纠结了很久,我决定用官方文档学习 ZooKeeper概述 学习文档 学习计划 ZooKeeper:分布式应用程序的分布式协调服务 设计目标 数据模型和分层名称空间 节点和短命节点 有条件的更新和监视 ...

  8. Spring Boot 官方文档学习(一)入门及使用

    Spring Boot 官方文档学习(一)入门及使用 个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问 ...

  9. R语言reshape2包-官方文档学习

    R语言reshape2包-官方文档学习 简介 核心函数 长数据与宽数据 宽数据 长数据 melt函数 meltarray meltdataframe meltdefault meltlist cast ...

  10. HarmonyOS(一) 快速开始学习鸿蒙开发,官方文档学习路线解析

    系列文章目录 HarmonyOS(一):快速开始学习鸿蒙开发,官方文档学习路线解析 HarmonyOS(二):应用开发环境搭建准备 HarmonyOS(三):创建你的第一个HelloWorld应用 文 ...

最新文章

  1. python【蓝桥杯vip练习题库】ALGO-201大等于n的最小完全平方数
  2. 小学五年级计算机进度安排,五年级下册信息技术年度教学计划
  3. 文件内存映射mmap解决大文件快速读写问题和进程间共享内存
  4. 10张让你大脑崩溃的图,敢接受挑战吗?
  5. GitChat专栏:Spring Cloud 与 Consul 的整合使用
  6. Docker 上安装、启动 MySQL (图解)
  7. 怎么看tomcat添加的项目名_Tomcat部署项目不加项目名访问,不加8080访问
  8. Dynatable – 基于 HTML5 jQuery 的交互表格插件
  9. 数据库原理及应用实验二
  10. Android获取超级管理员权限
  11. 2018年Sketch UI界面设计套件前十了解下!
  12. android键盘坏了怎么办,手机虚拟键盘失灵怎么办
  13. 什么东西可以替代触屏笔?Ipad触屏笔推荐品牌
  14. redhat 7 手册
  15. Android实现类似股票列表联动
  16. 3通道高清视频编码电路 转接IC GM7123:TTL转VGA芯片
  17. python-纯函数
  18. 英语语言学专业学习计算机语言学,英语语言学
  19. 论文阅读笔记——Backdoor Defense with Machine Unlearning
  20. 拒了海康威视的offer

热门文章

  1. 华为静态路由配置及讲解
  2. HCIE-Security Day2:防火墙安全区域、安全级别的理解
  3. 网络核心之数据交换 - 报文、分组交换
  4. PPP认证原理和实验
  5. DelegatingFilterProxy详解
  6. --initialize specified but the data directory has files in it. Aborting.
  7. nmap +shell脚本实现内网端口巡检
  8. Spring 的 ApplicationEvent and ApplicationListener
  9. java设计模式-可复用面向对象软件的基础(一)
  10. 野外帐篷露营避难有感