Tensorflow基本概念(一)

类型描述用途
Session会话图必须在称之为“会话”的上下文中执行。会话将图的op分发到诸如CPU或者GPU上计算
Graph描述计算过程必须在Session中启动
tensor数据数据类型之一,代表多维数组
op操作图中的节点被称之为op,一个op获得0或者多个Tensor,执行计算,产生0或者多个Tensor
Variable变量数据类型之一,运行过程中可以被改变,用于维护状态
feed赋值为op的tensor赋值
fetch取值从op的tensor中取值
Constant常量数据类型之一,不可变

1、计算图模型

1.1计算图的概念

tensorflow的名字就已经表达了它的两个重要的概念:tensor,flow。其中tensor指的是张量,它表示了tensorflow的基本数据类型;flow的意思是“流”,表示了tensoflow的计算模型,即张量通过计算不断地进行进行转化。

tensorflow的一个计算就代表了一个数据节点,而节点与节点之间的边则描述了计算之间的关系

1.2 计算图的使用

tensorflow的计算一般可以分为连个阶段:第一个阶段需要定义计算图中所有的计算,第二个阶段就是执行计算的阶段

构造阶段的主要目的是为了构建一张计算图.构建图的第一步是创建源op.源op不需要任何输入,源op的输出被传递给其他op作为输入.例如常量(Constant).在TensorFlow中存在一个默认图(defalut graph)。op构造器可以为其增加节。.很多时候我们会直接使用该图,可以通过tf.Graph.as_default()来获取。

方法用途
tf.Graph.as_graph_def()返回一个图的序列化的GraphDef,表示序列化的GraphDef可以导入到另外一个图(使用import_graph_def())
tf.Graph.get_operations()返回图中的操作节点列表
tf.Operation.name操作节点op的名称
tf.Operation.type操作节点op的类型
tf.Operation.inputs操作节点的输入与输出
tf.Operation.run(session=None,feed_dict=None)在会话中执行该操作
tf.add_to_collection(name,value)基于默认的图,其功能便为Graph.add_to_collection()
tf.get_collection(key,scope=None)基于默认的图,其功能便为Graph.get_collection()

下面展示一些 graph的代码

import tensorflow as tf
t = tf. Graph
with t.as_dafault():
	v = tf.get_Variable("v",initializer=tf.zeros_initializer(shape[1]))

2、张量(tensor)

tensor是Tensorflow中最基础的数据结构,可理解为n维数组或矩阵,一般将零维的张量称为标量或者常数,一维的张量可理解为向量,二维张量可理解为矩阵,三维则是三维数组。在计算的过程中,张量没有保存数字,而是保存了运算的过程,最后的得出的结果也是对运算结果的引用。
张量主要保存三种属性:

  • 属性名字:他是张量的唯一标识,给出了张量是如何计算出来的
  • 张量维度
  • 数据类型:在计算的时候,一定要注意数据类型相匹配,否则就会报错。
    张量的用处:
  • 对中间结果进行引用,提高代码的可读性
  • 得到计算的结果
tf.Session().run(Tensor)

以下是tensor的定义

# constant函数的定义
constant(value, dtype=None, shape=None, name="Const", verify_shape=False)

# 零维张量
import tensorflow as tf
a = tf.constant(1,tf.float32,name='a')
#一维张量
b = tf.constant([2,2,3],name='b')
#二维张量
c = tf.constant([[2,2,3],[3,4,5]],tf.float32,name='c')
#三维张量
d = tf.constant(
   [[[1, 2], [3, 4]],
	[[5, 6], [7, 8]],
	[[9, 10],[11, 12]]
	],tf.float32,name='d')

3、会话(Session)

首先我们需要创建一个Session对象.在不传参数的情况下,该Session的构造器将启动默认的图.之后我们可以通过Session对象的run(op)来执行我们想要的操作.

方法用途
tf.Session.run(fetches,feed-dict=Noe,options=Node,run_metadata=None)运行fetches中的操作节点并求其
tf.Session.close()关闭会话
tf.Session.graph返回加载该会话的图()
tf.Session.as_default()设置该对象为默认会话,并返回一个上下文管理器

代码流程

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

# 但一般会使用,以下方式
with tf.Session() as sess():
	sess.run()

4、op

op指的是操作:接受多个输入,同时也有多个输出,他的数据类型一般是tensor,constant,variable

#对于tensor
# 创建
tensor_name=tf.placeholder(type, shape, name)


#对于variable
# 创建变量
name_variable = tf.Variable(value, name)

# 初始化单个变量
init_op=variable.initializer()

# 初始化所有变量
init_op=tf.initialize_all_variables()

# 更新操作
update_op=tf.assign(variable to be updated, new_value)

5、 Feed

我们可以通过TensorFlow对象的placeholder()为变量创建指定数据类型占位符,在执行run(op)时通过feed_dict来为变量赋值

import tensorflow as  tf

input_1 = tf.placeholder(tf.float32)
input_2 = tf.placeholder(tf.float32)
output = tf.add(input_1, input_2)

with tf.Session() as sess:
    # 通过feed_dict来输入,outpu表示输出
    print(sess.run([output],feed_dict={input_1:[7.],input_2:[2.]}))

6、 模型保存

方法用途
tf.train.Saver.save(sess,save_path,global_step=None,latest_filename=None,meta_graph_suffix=’meta’,write_meta_graph=True)保存变量
tf.train.Saver.restore(sess,save_path)恢复变量
tf.train.Saver.last_checkpoints()列出最近未删除的checkpoint文件名
tf.train.Saver.set_last_checkpoints(last_checkpoints)设置checkpoint文件名列表
tf.train.Saver.set_last_checkpoints_with_time(last_checkpoints_with_time)设置checkpoint文件名列表和时间戳

保存模型

import tensorflow as tf

def save_model():
    v1 = tf.Variable(tf.random_normal([1, 2]), name="v1")
    v2 = tf.Variable(tf.random_normal([2, 3]), name="v2")
    init_op = tf.global_variables_initializer()
    saver = tf.train.Saver()
    with tf.Session() as sess:
        sess.run(init_op)
        saver_path = saver.save(sess, "./model.ckpt")
        print("model saved in file: ", saver_path)

加载模型,不需要进行变量的初始化

import tensorflow as tf

def load_model():
    v1 = tf.Variable(tf.random_normal([1, 2]), name="v1")
    v2 = tf.Variable(tf.random_normal([2, 3]), name="v2")
    saver = tf.train.Saver()
    with tf.Session() as sess:
        saver.restore(sess,"./model.ckpt")
        print("mode restored")

7、Variable

在这里插入图片描述
variable在使用之前,一定要进行初始化,具体可以看op

【参考文献】
1.https://blog.csdn.net/dd864140130/article/details/71774229
2.https://blog.csdn.net/u010591976/article/details/82183676

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值