Tensorflow杂记

学了Tensorflow也有一段时间,整理下知识。

TensorFlow中有两个最重要的概念:Tensor和Flow。Tensor汉译为张量,英文解释为( a generalization of the concept of a vector)

可以近似的看作为向量。Flow 是 "流"的意思,这体现了他的计算模型和方式

import tensorflow as tf

hello = tf.constant('TensorFlow Test')   #  创建 constant 对象

sess = tf.Session()   #   实例化session
print(sess.run(hello), type(hello))

OUTPUT:
b'TensorFlow Test' <class 'tensorflow.python.framework.ops.Tensor'>

计算视图的运用

#  TensorFlow程序一般分为两个步骤:

     第一是定义计算图中所有的计算;

     第二是执行计算图中的计算

在 TensorFlow 程序中,系统会自动维护一个默认的计算图,通过 tf.get_default_graph() 函数可以获取当前默认的计算图
tf.get_default_graph()  得到的是计算图所在的内存地址。

#  TensorFlow 支持通过 tf.Graph 函数来生成新的计算图。不同计算图上的张量和运算都不会共享

g1 = tf.Graph()  #  创建 g1 张量
with g1.as_default(): # 在计算阁 gl 中定义变量“v”,并设置初始值为 0 。
    v = tf.get_variable("v",  shape= [1], initializer=tf.zeros_initializer())  # 新版函数内无参数
    
g2 = tf.Graph()  #  创建 g2 张量
with g2.as_default():
    v = tf.get_variable("v", shape= [2,3], initializer=tf.ones_initializer())
    
# 在计算图 gl 中读取变盘“v”的取值 。

with tf.Session(graph=g1) as sess:  
    tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
        print(sess.run(tf.get_variable("v")))
        
with tf.Session(graph=g2) as sess:  
    tf.global_variables_initializer().run()
    with tf.variable_scope("", reuse=True):
        print(sess.run(tf.get_variable("v")))

OUTPUT:
    [0.]
[[1. 1. 1.]
 [1. 1. 1.]]

      在不同的计算图中,变量v是不一样的。TensorFlow 中的计算图不仅仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。

变量的使用:

weights = tf.Variable(tf.random_normal([2, 3], stddev=2, mean=2))  # 创建变量
# x = tf.constant([[1.0,2.]])
# r = tf.matmul(x, weights)
with tf.Session() as sess:
    sess.run(weights.initializer)  #  无该步骤无法进行会话,在第一次使用变量前要初始化变量
    print(sess.run(weights))

张量

张量可以被简单理解为多维数组。其中零阶张量表示标量( scalar ),也就是一个数: 第一阶张量为向量 ,也就是一个一维数组;第 n 阶张量可以理解为一个 n 维数组 。但张量在 TensorFlow 中的实现并不是直接采用数组的形式,它只是对 TensorFlow 中运算结果的引用。在张量中并没有真正保存数字,它保存的是如何得到这些数字的计算过程

import tensorflow as tf
# tf.constant 是一个计算,这个计算的结果为一个张量 , 保存在变量 a 中。
a = tf.constant([5.0, 2.0], name="a")   # 定义常量
b = tf.constant([4.0, 5.50], name="b")
result = tf.add(a, b, name="test")

print(result)

OUTPUT:
    Tensor("test:0", shape=(2,), dtype=float32)

输出张量的解释:

1、张量的第一个属性名字不仅是一个张量的唯一标识符,“ test:0”就说明了 result 这个张量是计算节点“ add” 输出的第一个结果(编号从0开始)。

2、张量的第二个属性是维度,

3、张量的第三个属性是类型,如果不指定类型整数默认为 int32,浮点数默认为 float32。建议通过指定 dtype 来明确指出变量或者常量的类型,避免出现类型不匹配问题。

TensorFlow 支持 14 种不同的类型, 主要包括了实数( tf.丑oat32 、 tf.float64 )、整数( tf.int8 、 tf.intl 6 、 tf.int32 、 tf.int64 、 tf.uint8 )、布尔型 C tf.bool) 和复数( tf.complex64 、tf.complex128 ) 。

张量使用主要分为两大类:

第一类用途是对中间计算结果的引用:
 

import tensorflow as tf

a = tf.constant([5.0, 2.0], name="a")   # 定义常量
b = tf.constant([4.0, 5.50], name="b")
result = a + b  # result 即为张量

通过张量来存储中间结果可以方便获取中间结果,当神经网络层数较多时,使用张量可以很轻松获得中间结果。
第二类用途是:使用张量的第二类情况是当计算图构造完成之后,张量可以通过 sess.run(Tensor) 用来获得计算结果,也就是得到真实的数字。

Tensorflow运行模型--Session

会话在计算完成之后必须关闭帮助系统回收资源,避免内存泄漏。

Tensorflow不会自动生成默认的会话,而是需要手动指定。当指定默认会话后,可以通过 tf.Tensor.eval 函数来计算一个张量的取值。

sess = tf.Session()
with sess.as_default():  #  指定 sess 为默认会话
    print(result.eval()) #  输出 result数值


在交互式环境下,tf.lnteractiveSession 使用这个函数会自动将生成的会话注册为默认会话。

sess1 = tf.InteractiveSession()
print(result.eval())
sess1.close()

无论使用哪种方法都可以通过 tf.ConfigProto() 来配置需要生成的会话
 

config = tf.ConfigProto(allow soft placement=True, log_device_placement=True)
sessl = tf.InteractiveSession(config=config)
sess2 = tf.Session(config=config)

在这些参数中,最常使用的有两个。第一个是 allow_so位_placement,这是一个布尔型的参数,当它为 True 时, 在以下任意一个条件成立时, GPU 上的运算可 以放到 CPU 上进行 :
   l. 运算无法在 GPU 上执行 。
   2. 没有 GPU 资源(比如运算被指定在第 二个 GPU 上运行 ,但是机器只有一个 GPU ) 。
   3. 运算输入包含对 CPU 计算结果的引用 。
这个参数的默认值为 False,但是为了使得代码的可移植性更强,在有 GPU 的环境下这个参数一般会被设置为 True。不同的 GPU 驱动版本可能对计算的支持有略微的区别,通过将 allow_soft_placement 参数设为 True , 当某些运算无法被当前 GPU 支持时,可 以自动调整到 CPU 上,而不是报错。类似地,通过将这个参数设置为 True,可以让程序在拥有不同数量的 GPU 机器上顺利运行。
     第二个使用得比较多的配置参数是 log_device_placement o 这也是一个布尔型的参数,当它为 True 时日志中将会记录每个节点被安排在哪个设备上以方便调试。而在生产环境中将这个参数设置为 False 可以减少日志量。

构建简单的神经网络

weights = tf.Variable(tf.random_normal([2, 3], stddev=2))
# 构建随机正态数组变量,均值默认为0,标准差默认为1

tf.zeros([m, n], detype="int32")  # 全 0 数组

tf.ones([m, n], detype="int32")  # 全 1 数组

df.fill([m, n], 3)  # 填充全为某个值的数组

tf.constant()  # 生成给定的常量

TensorFlow 也支持通过其他变量 的初始值来初始化新的变量。
 

w2 = tf.Variable(weights.initialized_value())
w3 = tf.Variable(weights.initialized_value() * 2.0)

# 无需指明形状,测试。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值