Tensorflow基础语法和概念

一些说明:学习tensorflow用到的Python语法,请参考这篇博客

计算图模型

Tensorflow的构建的机器学习模型都是有向图模型,在Tensorflow中,一个图的每个节点都代表一个计算操作,图的边代表数据的流向。使用计算图可以根据操作间的实际依赖关系进行有选择的计算操作,节约计算资源。

Graphs, Sessions, and Fetches

使用Tensorflow框架主要包含两个过程:创建一个图模型和执行该图模型。

创建并执行图模型

示例代码:

import tensorflow as tf# 这里的三个常量是3个图结点
a = tf.constant(5)
b = tf.constant(3)
c = tf.constant(3)# 这里的三个计算也是3个图结点
d = tf.multiply(a, b)
e = tf.add(c, b)
f = tf.subtract(d, e)# 执行图模型
sess = tf.Session()
outs = sess.run(f)
sess.close()# 输出结果
print("outs = {}".format(outs))

计算图模型需要建立在Tensorflow的一个Session中,运行时调用run(),使用完后要用close()进行关闭。run()函数的参数只需要标明我们需要的对象即可,比如上面我们需要f

上述的图模型为:

加减操作等也可以使用符号简化:

构造并管理图模型

当我们导入Tensorflow的时候,Tensorflow就会自动为我们创建一个计算图。我们可以自己创建额外的图模型,并进行有关的操作。tf.Graph()是创建新图的命令,图是Tensorflow的一个对象。

import tensorflow as tf
print(tf.get_default_graph())
g = tf.Graph()  # 建立一个新图
print(g)

Fetches

在上述的图模型中,我们有一个特殊的结点f作为run()的参数,这个参数称为Fetches。我们可以自定义一个参数列表,来输出需要的结点信息。

with tf.Session() as sess:fetches = [a, b, c, d, e, f]  # 标明需要计算的结点,作为一个fechesouts = sess.run(fetches)
print("outs={}".format(outs))

张量流

图模型的结点是操作,边是张量对象

在图模型中,只有当计算图执行时,图结点的操作才会执行。在设计图模型的阶段,结点的计算过程不会执行,而且结点之间也没哟数据流传递。

数据类型

使用tf.cast()可以进行数据类型的转换。

张量数组和形状

张量可以理解成高维数组。除非进行显式说明,否则Tensorflow自动进行形状类型推断。当进行高维数组输入输入时,一般使用Python中的list或者Numpy中的数组作为输入。

import numpy as np
import tensorflow as tfc = tf.constant([[1, 2, 3],[4, 5, 6]])
print("python list input: {}".format(c.get_shape()))c = tf.constant(np.array([[[1, 2, 3],[4, 5, 6]],[[1, 1, 1],[2, 2, 2]]]))
print("3d NumPy array input: {}".format(c.get_shape()))

输出:

python list input: (2, 3)
3d NumPy array input: (2, 2, 3)

注意一点,高维数组的形状的顺序不要弄反了。

矩阵乘法

import tensorflow as tfA = tf.constant([[1, 2, 3],[4, 5, 6]])
print(A.get_shape())x = tf.constant([1, 0, 1]) # 这里的x是一维向量
print(x.get_shape())
x = tf.expand_dims(x, 1)   # 转换成二维的单列矩阵
print(x.get_shape())b = tf.matmul(A, x)sess = tf.InteractiveSession()
print("matmul result:\n{}".format(b.eval()))
sess.close()

输出:

(2, 3)
(3,)
(3,1)
matmul result:
[[ 4]
[10]]

上述代码说明:在Tensorflow中,只有维数相同的数据元素才能进行加减乘除等的运算。InteractiveSession()可以让我们不必使用变量来表示Session,就可以直接计算想要的数值。

命名

每一个张量对象都有一个唯一的标识名。比如:

import tensorflow as tfwith tf.Graph().as_default():c1 = tf.constant(4, dtype=tf.float64, name='c')c2 = tf.constant(4, dtype=tf.int32, name='c')
print(c1.name)
print(c2.name) # 自动更新命名

输出:

c:0
c_1:0

命名空间:在图模型非常复杂,且单一的命名会起冲突的时候使用。类比C++的命名空间

import tensorflow as tfwith tf.Graph().as_default():c1 = tf.constant(4, dtype=tf.float64, name='c')with tf.name_scope("prefix_name"):  # 建立命名空间c2 = tf.constant(4, dtype=tf.int32, name='c')c3 = tf.constant(4, dtype=tf.float64, name='c')print(c1.name)
print(c2.name)
print(c3.name)

输出:
c:0
prefix_name/c:0
prefix_name/c_1:0

变量, 占位符

张量有两种重要的类型:变量和占位符。

变量:

与变量相区别的是之前代码中的常量,常量的数值不会发生改变。变量的值可以进行更新,并且可以存储到磁盘中,之后还可以从磁盘中读取。
使用变量需要两个步骤:
1. 使用tf.Variable()函数创建一个变量,并且定义它的初始化数值
2. 显式地初始化,在一个Session中运行tf.global_variables_initializer(),为变量分配内存空间和初始化数值 。
这里的变量和C/C++中的概念类似。

import tensorflow as tfinit_var = tf.random_normal((1, 5), 0, 1)
var = tf.Variable(init_var, name='var')
print("pre run:\n{}".format(var))  # 只是声明了,没有占用实际的空间init = tf.global_variables_initializer()
with tf.Session() as sess:sess.run(init)  # 分配内存空间,初始化数值post_var = sess.run(var)print("\npost run:\n{}".format(post_var))

占位符 Placeholder:

占位符主要用于训练模型时获取数据。我们可以认为占位符也是变量的一种,不过它的数据需要在训练的实际过程中进行填充。占位符有一个shape参数,该参数如果不填写或者填写None的话,这个占位符可以填充任意尺寸的数据。None参数在输入矩阵时很常用。
比如

ph = tf.placeholder(tf.float32, shape=(None, 10))

定义的占位符必须进行数据填充,否则会抛出异常。填充输入数据需要使用Session.run()方法,内部是一个字典的结构:关键字是占位符的名字,填充数据以python中的list形式或者Numpy中的array形式。比如:

sess.run(ph, feed_dict={x: X_data, w: w_data})

下面给出一个完整的例子:

import tensorflow as tf
import numpy as npx_data = np.random.randn(5, 10)
w_data = np.random.randn(10, 1)with tf.Graph().as_default():x = tf.placeholder(tf.float32, shape=(5, 10))w = tf.placeholder(tf.float32, shape=(10, 1))b = tf.fill((5, 1), -1.)xw = tf.matmul(x, w)xwb = xw + bs = tf.reduce_max(xwb)with tf.Session() as sess:outs = sess.run(s, feed_dict={x: x_data, w: w_data})print("outs = {}".format(outs))

outs填充数据的时候,是以python中dict的格式进行的,要把包含的所有占位符都进行填充。

Tensorflow基础语法和概念相关推荐

  1. Ajax和JSON-学习笔记03【JSON_基础语法】

    Java后端 学习路线 笔记汇总表[黑马程序员] Ajax和JSON-学习笔记01[原生JS方式实现Ajax] Ajax和JSON-学习笔记02[JQuery方式实现Ajax] Ajax和JSON-学 ...

  2. 【JAVA学习】1、零基础入门Java 基础语法:概念、规则、格式

    [JAVA学习]1.零基础入门Java 基础语法 前言 JAVA开发环境选择 Java 基础概念 Java 标识符 Java修饰符 基础代码模板框架 命名规则 基础规则 后端开发规则 代码格式 前言 ...

  3. python学完面向对象之后_Python学完基础语法后,再往后应该学什么?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 第一阶段:Python语言及应用 课程内容:Python语言基础,面向对象设计,多线程编程,数据库交互技术,前端特效,Web框架,爬虫框架,网络编程 掌握 ...

  4. TensorFlow基础剖析

    TensorFlow基础剖析 一.概述 TensorFlow 是一个使用数据流图 (Dataflow Graph) 表达数值计算的开源软件库.它使用节点表示抽象的数学计算,并使用 OP 表达计算的逻辑 ...

  5. 资源 | Intel发布AI免费系列课程3部曲:机器学习基础、深度学习基础以及TensorFlow基础

    翻译 | AI科技大本营(公众号ID:rgznai100) 校对 | 成龙 编辑 | 明明 Intel于近期发布了三门AI系列的免费课程,分别是关于机器学习基础.深度学习基础.TensorFlow基础 ...

  6. 深入浅出CMake(二): 基础语法

    在<深入浅出CMake(一):基础篇>文章中,我们已经知道了怎么依葫芦画瓢编写简单的 CMake 构建文件了,但如果应对复杂的工程的话,这还是远远不够的. CMake 是一套编译构建体系, ...

  7. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  8. python 条件表达式换行_Python基础语法 - LongKing-Xu的个人空间 - OSCHINA - 中文开源技术交流社区...

    python基础语法 一.标识符 在Python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. 在Python中的标识符是区分大小写的. 在Python中以下划线开头的标识符是有 ...

  9. python turtle基本语法_Python 基础语法-turtle篇

    Python 基础语法-turtle篇 今天这节课主要讲了类的概念,并引出turtle中的函数和Turtle类. -创建一个Turtle类:brad=turtle.Turtle() -定义Turtle ...

最新文章

  1. 基于 OpenCV 的图像阴影去除
  2. LeetCode 746. Min Cost Climbing Stairs--动态规划--Java,C++,Python解法
  3. [luogu4571 JSOI2009] 瓶子和燃料 (数论)
  4. 2019ug最新版本是多少_UGNX将在2019年发布最新版本,也是最后一个版本,让人更意想不到的是它的这项新功能!...
  5. python装饰器作用-什么是Python装饰器,有什么作用?
  6. QT写入cmd命令并且调用,以及指定路径新建文件夹
  7. Kotlin 继续助力 Android 开发,并计划涉足更多领域
  8. capture RGBD data with opencv4.1.1 from XTION2 on windows 10
  9. linux的使用 --- 安装git
  10. 使用windows Builder的一个中文乱码问题解决
  11. 中学计算机基础知识,初中信息技术学业水平考试计算机基础知识考点大全(重点汇总)...
  12. matlab输出动态gif图片
  13. ​大话中国骨干网(下)(转)​
  14. IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Jar包版
  15. fastboot命令汇总
  16. python3文件路径操作常用方法带示例详解(os.path模块,os.listdir,os.walk,os.scandir方法等)(不定期更新整理中)
  17. 华为云图引擎服务 GES 实战——创图
  18. android9壁纸存放路径,Android基础入门教程——10.9 WallpaperManager(壁纸管理器)
  19. matlab学习笔记之——符号函数应该怎么作图?
  20. 微信小程序中引入ttf字体

热门文章

  1. 第 20 次 CSP认证 202009-3 点亮数字人生
  2. 指定范围内的水仙数(C语言)
  3. 东大OJ-1544: GG的战争法则
  4. 突击计划——给定大写字母,输出小写字母
  5. AMS磁编码器:AS5048与AS5047区别,伺服电机闭环系统位置反馈
  6. 递归与递推类型题小结
  7. IntellijIDEA配置Maven
  8. leetcode894.AllPossibleFullBinaryTrees
  9. 面试—每日一题(3)
  10. mySQL 插入,更新和删除数据