TensorFlow学习1

mac 安装 venv环境下

pip install --ignore-installed --upgrade "https://raw.githubusercontent.com/lakshayg/tensorflow-build/master/tensorflow-1.8.0-cp36-cp36m-macosx_10_7_x86_64.whl" 

1.计算图

tensorflow程序一般分为两个阶段:

1.定义计算图所有的计算

例:

import tensorflow as tf
a = tf.constant([1.0,2.0],name='a')
b = tf.constant([2.0,3.0],name='b')
result = a+b

在Tensorflow程序中系统会自动维护一个,默认的计算图,通过tf.get._default_graph函数可以获取当前默认的计算图

import tensorflow as tf
#TensorFlow支持通过tf.Graph()函数来生成新的计算视图
#不同的计算视图的张量和运算都不会共享
g1 = tf.Graph()
with g1.as_default():
    #在计算视图g1中定义变量"V",并设置初始值为0;
    # 新版zeros_initializer()的构造函数默认指定数据类型,没有shape相关内容
    v = tf.get_variable('v',[1],initializer=tf.zeros_initializer())

g2 = tf.Graph()
with g2.as_default():
    #在计算视图g2中定义变量"V",并设置初始值为1;
    v = tf.get_variable('v',[1],initializer=tf.ones_initializer())
# 在计算图g1中提取变量'v'的值:

with tf.Session(graph=g1) as sess:
    tf.global_variables_initializer().run()
    #“scope”的意思是“范围”
    # Variable Scope 这种独特的机制来共享变量。
    with tf.variable_scope('',reuse=True):
        #在计算图g1中,变量'v'的取值应该为0,所以下面这行会输出[0.]
        print(sess.run(tf.get_variable('v')))

with tf.Session(graph=g2) as sess:
    tf.global_variables_initializer().run()
    #“scope”的意思是“范围”
    # Variable Scope 这种独特的机制来共享变量。
    with tf.variable_scope('',reuse=True):
        #在计算图g2中,变量'v'的取值应该为0,所以下面这行会输出[1.]
        print(sess.run(tf.get_variable('v')))

以上代码产生两个计算图,每个计算图中定义了一个名字为‘v'的变量,在g1中将v初始化为0,在g2中初始化为1,当运行不同的计算图的时候,变量v的值是不一样,tensorflow中的计算图不仅仅可以用来隔离张量和计算,他还提供了管理张量和计算的机制,计算图可以痛殴tf.Graph.device函数来指定运行计算的设备,这为tensorflow使用GPU提供了机制

g = tf.Graph()
# 指定计算运行的设备
with g.device('/gpu:0'):
    result = a+b

2、在session中执行计算

2.TensorFlow数据模型------张量

   在TensorFlow程序红,所有的数据都通过长脸的形式来表示,从功能的角度上来看,张量可以被简单的理解为多为数组

,其中零阶张量(scalar),也就是一个数,第一阶张量为向量(vector),也就是一个一维数组;第n阶张量可以理解为一个n维数组。

# tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中
a = tf.constant([1.0,2.0],name='a')

一个张量主要保存了三个属性:名字(name)、维度(shape)和类型(type)。其中,name属性以“node:src_output”的形式表示,node表示节点的名称,src_output表示当前张量来自节点的第几个输出。还可以通过result.get_shape函数来获取结果张量的维度信息。

3.TensorFlow运行模型-------会话

     TensorFlow中的会话(session)来执行定义好的运算,会话拥有并管理tensorflow程序运行时的所有资源。

TensorFlow中使用的会话模式一般有两种,第一种模式需要明确调用会话生成还书和关闭会话函数

#创建一个会话
sess = tf.Session()
#使用这个创建好的会话来得到关心的运算的结果,比如可以调用sess.run(result)
sess.run(...)
#关闭会话使得本次运行中使用到的资源可以被释放。
sess.close()

使用上面模式时,计算完成后,需要明确调用Session.close函数来关闭会话,当程序一场推出时,关闭会话就不会被执行,从而导致资源泄漏。

TensorFlow可以通过python的上下文管理器来使用会话:

#创建一个会话,并通过python中的上下文管理其来管理这个会话
with tf.Session() as sess:
    # 使用创建好的会话来计算关心的结果
    sess.run(...)
    #当上下文退出时会话关闭和资源释放自动完成
在交互式环境下,使用设置默认会话的方法来获取张量的取值更加方便,tensorflow提供了一种在交互式环境下直接构
默认会话的函数,tf.InteractiveSession。该函数会自动将生成的会话注册为默认会话。
sess= tf.InteractiveSession()
print(result.eval())
sess.close()

 无论使用哪种方法都可以通过ConfigProto Protocol Buffer来配置需要生成的会话。使用tf.ConfigProto函数配置会话的方法:

config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
sess1=tf.InteractiveSession(config=config)
sess2=tf.Session(config=config)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值