《TensorFlow实战Google深度学习框架》API整理(一)

5 篇文章 0 订阅
3 篇文章 0 订阅

最近在学习深度学习的相关知识,建议将学习吴恩达老师深度学习视频与学习《TensorFlow实战Google深度学习框架》一书结合起来交错进行。同时推荐一个学习吴恩达老师深度学习的GitHub地址,能够方便地对授课内容进行回顾总结,https://github.com/fengdu78/deeplearning_ai_books。这一系列笔记,主要是对《TensorFlow实战Google深度学习框架》中遇到的API进行整理,以便后续回顾。

目录

Ch3 TensorFlow入门

tf.Graph().as_default()

tf.get_variable()与tf.Variable()

tf.ones_initializer()

tf.global_variables_initializer()与tf.local_variables_initializer()

tf.variable_scope("", reuse=True)

tf.InteractiveSession ()

 tf.ConfigProto()

tf.reduce_mean()

RandomState

其它


Ch3 TensorFlow入门

tf.Graph().as_default()

tf.Graph() 表示实例化了一个类,一个用于 tensorflow 计算和表示用的数据流图,通俗来讲就是:在代码中添加的操作(画中的结点)和数据(画中的线条)都是画在纸上的“画”,而图就是呈现这些画的纸,你可以利用很多线程生成很多张图,但是默认图就只有一张。

tf.Graph().as_default() 表示将这个类实例,也就是新生成的图作为整个 tensorflow 运行环境的默认图,如果只有一个主线程不写也没有关系,tensorflow 里面已经存好了一张默认图,可以使用tf.get_default_graph()来调用(显示这张默认纸),当你有多个线程就可以创造多个tf.Graph(),就是你可以有一个画图本,有很多张图纸,这时候就会有一个默认图的概念了。

tf.get_variable()与tf.Variable()

tf.Variable()

# 用于生成一个初始值为initial-value的变量。必须指定初始化值
W = tf.Variable(<initial-value>, name=<optional-name>)

tf.get_variable()

# 获取已存在的变量(要求不仅名字,而且初始化方法等各个参数都一样),如果不存在,就新建一个。
可以用各种初始化方法,不用明确指定值。
W = tf.get_variable(name, shape=None, dtype=tf.float32, initializer=None,
       regularizer=None, trainable=True, collections=None)

区别

推荐使用tf.get_variable(), 因为:

1. 初始化更方便

比如用xavier_initializer:

W = tf.get_variable("W", shape=[784, 256],
    initializer=tf.contrib.layers.xavier_initializer())

2. 方便共享变量

因为tf.get_variable() 会检查当前命名空间下是否存在同样name的变量,可以方便共享变量。而tf.Variable 每次都会新建一个变量。需要注意的是tf.get_variable() 要配合reuse和tf.variable_scope() 使用。

tf.ones_initializer()

神经网络中经常使用常量初始化方法来初始化偏置项。当初始化一个维数很多的常量时,一个一个指定每个维数上的值很不方便,tf提供了 tf.zeros_initializer() 和 tf.ones_initializer() 类,分别用来初始化全0和全1的tensor对象。

import tensorflow as tf
 
init_zeros=tf.zeros_initializer()
init_ones = tf.ones_initializer
 
with tf.Session() as sess:
  x = tf.get_variable('x', shape=[8], initializer=init_zeros)
  y = tf.get_variable('y', shape=[8], initializer=init_ones)
  x.initializer.run()
  y.initializer.run()
  print(x.eval())
  print(y.eval())
 
#output:
# [ 0.  0.  0.  0.  0.  0.  0.  0.]
# [ 1.  1.  1.  1.  1.  1.  1.  1.]

tf.global_variables_initializer()与tf.local_variables_initializer()

f.global_variables_initializer()添加节点用于初始化所有的变量(GraphKeys. GLOBAL_VARIABLES)。返回一个初始化所有全局变量的操作(Op)。在你构建完整个模型并在会话中加载模型后,运行这个节点,能够将所有的变量一步到位的初始化,非常的方便。通过feed_dict, 你也可以将指定的列表传递给它,只初始化列表中的变量。

sess.run(tf.global_variables_initializer(), 
feed_dict={
        learning_rate_dis: learning_rate_val_dis,
        adam_beta1_d_tf: adam_beta1_d,
        learning_rate_proj: learning_rate_val_proj,
        lambda_ratio_tf: lambda_ratio,
        lambda_l2_tf: lambda_l2,
        lambda_latent_tf: lambda_latent,
        lambda_img_tf: lambda_img,
        lambda_de_tf: lambda_de,
        adam_beta1_g_tf: adam_beta1_g,
        }) 
# learning_rate_dis为设置的变量,learning_rate_val_dis为我设置的具体的值。后续同理

tf.local_variables_initializer()返回一个初始化所有局部变量的操作(Op)。初始化局部变量(GraphKeys.LOCAL_VARIABLE)。GraphKeys.LOCAL_VARIABLE中的变量指的是被添加入图中,但是未被储存的变量。

tf.variable_scope("", reuse=True)

tf.variable_scope()用来指定变量的作用域,作为变量名的前缀,支持嵌套,如下:

with tf.variable_scope("foo"):
    with tf.variable_scope("bar"):
        v = tf.get_variable("v", [1])
assert v.name == "foo/bar/v:0"

reuse这一项参数设置为True,一般与tf.get_variable()联合使用,表示重用已经创建的变量。

with tf.variable_scope("foo"):
    v = tf.get_variable("v", [1])
with tf.variable_scope("foo", reuse=True):
    v1 = tf.get_variable("v", [1])
assert v1 is v

当前环境的作用域可以通过函数tf.get_variable_scope()获取,并且reuse标志可以通过调用reuse_variables()设置为True,这个非常有用,如下

with tf.variable_scope("foo"):
    v = tf.get_variable("v", [1])
    tf.get_variable_scope().reuse_variables()
    v1 = tf.get_variable("v", [1])
assert v1 is v

tf.InteractiveSession ()

tf.InteractiveSession()默认自己就是用户要操作的session,而tf.Session()没有这个默认,因此用eval()启动计算时需要指明session。例如:

import tensorflow as tf
import numpy as np

a=tf.constant([[1., 2., 3.],[4., 5., 6.]])
b=np.float32(np.random.randn(3,2))
c=tf.matmul(a,b)
init=tf.global_variables_initializer()
sess=tf.Session()
print (c.eval())

这样会报错,需要修改为print (c.eval(session=sess))或者with sess.as_default():或者with tf.Session() as sess。如果不想采用以上的三种方式,可以使用tf.InteractiveSession ():

import tensorflow as tf
import numpy as np

a=tf.constant([[1., 2., 3.],[4., 5., 6.]])
b=np.float32(np.random.randn(3,2))
c=tf.matmul(a,b)
init=tf.global_variables_initializer()
sess=tf.InteractiveSession()
print (c.eval())

 tf.ConfigProto()

config = tf.ConfigProto(allow_soft_placement=True, allow_soft_placement=True)
config.gpu_options.per_process_gpu_memory_fraction = 0.4  #占用40%显存
sess = tf.Session(config=config)

1. 记录设备指派情况 :  tf.ConfigProto(log_device_placement=True)

设置tf.ConfigProto()中参数log_device_placement = True ,可以获取到 operations 和 Tensor 被指派到哪个设备(几号CPU或几号GPU)上运行,会在终端打印出各项操作是在哪个设备上运行的。

2. 自动选择运行设备 : tf.ConfigProto(allow_soft_placement=True)

在tf中,通过命令 "with tf.device('/cpu:0'):",允许手动设置操作运行的设备。如果手动设置的设备不存在或者不可用,就会导致tf程序等待或异常,为了防止这种情况,可以设置tf.ConfigProto()中参数allow_soft_placement=True,允许tf自动选择一个存在并且可用的设备来运行操作

tf.reduce_mean()

tf.reduce_mean 函数用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的的平均值,主要用作降维或者计算tensor(图像)的平均值。

import tensorflow as tf
 
x = [[1,2,3],
      [1,2,3]]
 
xx = tf.cast(x,tf.float32)
mean_all = tf.reduce_mean(xx, keep_dims=False)
mean_0 = tf.reduce_mean(xx, axis=0, keep_dims=False)
mean_1 = tf.reduce_mean(xx, axis=1, keep_dims=False)
 
with tf.Session() as sess:
    m_a,m_0,m_1 = sess.run([mean_all, mean_0, mean_1])
 
print m_a    # output: 2.0
print m_0    # output: [ 1.  2.  3.]
print m_1    #output:  [ 2.  2.]

值得注意的是,在tf或者np的api中,一般来说遇到的axis参数,0都是代表列(第一维),1是代表行(第二维)。与tf.reduce_sum类型的函数类似的还有tf.reduce_sum、tf.reduce_max、tf.reduce_all(计算tensor指定轴方向上的各个元素的逻辑和),tf.reduce_any(计算tensor指定轴方向上的各个元素的逻辑或)。

RandomState

from numpy.random import RandomState
rdm = RandomState(1) #伪随机数的随机种子
X = rdm.rand(128,2) #在训练神经网络时,这是np为我们提供的一种生产数据的方式,128代表128组数据,2代表输入数据的两个特征

其它

tf.random_normal():用于从服从正态分布的数值中取出指定个数的数值。

tf.matmul():稍微值得注意的是tf.multiply()是两个矩阵中的对应元素相乘,tf.matmul()是矩阵相乘得到的结果。

tf.sigmoid(y) 计算 x 元素的sigmoid.具体来说,就是:y = 1/(1 + exp (-x))。

tf.log():计算元素 x 的自然对数。

tf.clip_by_value():tf.clip_by_value(A, min, max):输入一个张量A,把A中的每一个元素的值都压缩在min和max之间。小于min的让它等于min,大于max的元素的值等于max。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值