tensorflow函数小结

40 篇文章 1 订阅
11 篇文章 0 订阅

tf.initializers.identity函数

定义在:tensorflow/python/ops/init_ops.py

生成单位矩阵的初始化程序.

仅用于2D矩阵.在使用十字绣网络时用到这个函数。

tf.reduce_max函数

计算张量的各个维度上的元素的最大值


import tensorflow as tf

max_value = tf.reduce_max([1, 3, 2])

with tf.Session() as sess:

    max_value = sess.run(max_value)

    print(max_value)##输出3

tf.sequence_mask函数

返回一个表示每个单元的前N个位置的mask张量,构建序列长度的mask标志,我理解就是判断输出每个维度前N个位置是否存在


import tensorflow as tf

mask = tf.sequence_mask([1, 3, 2], 5)

with tf.Session() as sess:

    mask = sess.run(mask)

    print(mask)
###


[[ True False False False False]

 [ True  True  True False False]

 [ True  True False False False]]

###

 tf.reduce_max、tf.sequence_mask一起使用,根据目标序列长度,选出其中最大值,然后使用该值构建序列长度的mask标志


import tensorflow as tf

max_value = tf.reduce_max([1, 3, 2])

mask = tf.sequence_mask([1, 3, 2], max_value)

with tf.Session() as sess:

    mask = sess.run(mask)

    print(mask)

###


[[ True False False]

 [ True  True  True]

 [ True  True False]]

###

tf.argmax函数

返回values在axis维度最大值的索引,此处对比 tf.reduce_max:返回values在axis维度的最大值


import tensorflow as tf

 

d = [[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]]  # d.shape = (2,3,2) 三维

 

idx = tf.argmax(d,axis=0)   

val = tf.reduce_max(d,axis=0)

 

with tf.Session() as sess:

 

    print(idx.eval())   # shape = (3,2) 二维

    print(val.eval())


output:
[[1 1]
 [1 1]
 [1 1]]
[[ 7  8]
 [ 9 10]
 [11 12]]

tf.expand_dims函数

expand_dims( input, axis=None, name=None, dim=None )

# 't' is a tensor of shape [2]
shape(expand_dims(t, 0)) ==> [1, 2]
shape(expand_dims(t, 1)) ==> [2, 1]
shape(expand_dims(t, -1)) ==> [2, 1]

# 't2' is a tensor of shape [2, 3, 5]
shape(expand_dims(t2, 0)) ==> [1, 2, 3, 5]
shape(expand_dims(t2, 2)) ==> [2, 3, 1, 5]
shape(expand_dims(t2, 3)) ==> [2, 3, 5, 1]

tf.split函数

tf.split(value,num_or_size_splits,axis=0, num=None,name='split')

value :输入的tensor
  num_or_size_splits :每个分割后的张量的尺寸,如果是个整数n,就将输入的tensor分为n个子tensor。如果是个tensor T,就将输入的tensor分为len(T)个子tensor。 
  axis :A 0-D int32 Tensor;表示分割的尺寸;必须在[-rank(value), rank(value))范围内;默认为0。
  num=None :可选的,用于指定无法从 size_splits 的形状推断出的输出数。

 

这里需要注意num_or_size_splits的使用
    如果num_or_size_splits是整数类型,num_split,则value沿维度 axis 分割成为num_split更小的张量。要求num_split均匀分配value.shape[axis]。
    如果num_or_size_splits不是整数类型,则它被认为是一个张量size_splits,然后将value分割成len(size_splits)块。第i部分的形状与value的大小相同,除了沿维度axis之外的大小size_splits[i]。

import tensorflow as tf

value = [[1, 2, 3], [4, 5, 6]]

split1, split2 = tf.split(value, [0, 2], 0)
split3, split4, split5 = tf.split(value, [1, 0, 2], 1)

with tf.Session() as sess:
	print("第一个变换结果:")
	print(sess.run(split1))
	print("**************")
	print(sess.run(split2))
	print("**************\r\n")

	print("第二个变换结果:")
	print(sess.run(split3))
	print("**************")
	print(sess.run(split4))
	print("**************")
	print(sess.run(split5))

第一个变换结果:
[]
**************
[[1 2 3]
 [4 5 6]]
**************

第二个变换结果:
[[1]
 [4]]
**************
[]
**************
[[2 3]
 [5 6]]

tf.matmul函数

将矩阵a乘以矩阵b,生成a * b。

格式: tf.matmul(a, b, transpose_a=False, transpose_b=False, adjoint_a=False, adjoint_b=False, a_is_sparse=False, b_is_sparse=False, name=None) 
参数: 
a: 一个类型为 float16, float32, float64, int32, complex64, complex128 且张量秩 > 1 的张量。 
b: 一个类型跟张量a相同的张量。 
transpose_a: 如果为真, a则在进行乘法计算前进行转置。 
transpose_b: 如果为真, b则在进行乘法计算前进行转置。 
adjoint_a: 如果为真, a则在进行乘法计算前进行共轭和转置。 
adjoint_b: 如果为真, b则在进行乘法计算前进行共轭和转置。 
a_is_sparse: 如果为真, a会被处理为稀疏矩阵。 
b_is_sparse: 如果为真, b会被处理为稀疏矩阵。 
name: 操作的名字(可选参数) 
返回值: 一个跟张量a和张量b类型一样的张量且最内部矩阵是a和b中的相应矩阵的乘积。 

注意: 
(1)输入必须是矩阵(或者是张量秩 >2的张量,表示成批的矩阵),并且其在转置之后有相匹配的矩阵尺寸。 
(2)两个矩阵必须都是同样的类型,支持的类型如下:float16, float32, float64, int32, complex64, complex128。 
引发错误: 
ValueError: 如果transpose_a 和 adjoint_a, 或 transpose_b 和 adjoint_b 都被设置为真

import tensorflow as tf
h_doc=tf.placeholder(tf.int32,[None,30,512])
h_query=tf.placeholder(tf.int32,[None,10,512])
temp = tf.matmul(h_doc, h_query, adjoint_b = True) # tf.batch_matmul(h_doc, h_query, adj_y=True)
print(temp.get_shape())

#(?, 30, 10)

tf.multiply函数

 

两个矩阵中对应元素各自相乘,就是点乘。

格式: tf.multiply(x, y, name=None) 
参数: 
x: 一个类型为:half, float32, float64, uint8, int8, uint16, int16, int32, int64, complex64, complex128的张量。 
y: 一个类型跟张量x相同的张量。  
返回值: x * y element-wise.  
注意: 
(1)multiply这个函数实现的是元素级别的相乘,也就是两个相乘的数元素各自相乘,而不是矩阵乘法,注意和tf.matmul区别。 
(2)两个相乘的数必须有相同的数据类型,不然就会报错。

 这里对比着numpy矩阵乘和点乘:

点乘可以直接用a*b就可以,在tensorflow也可以,

矩阵乘用np.dot(a,b)

 

tf.contrib.layers.batch_norm函数


tf.contrib.layers.batch_norm(

    inputs,

    decay=0.999,

    center=True,

    scale=False,

    epsilon=0.001,

    activation_fn=None,

    param_initializers=None,

    param_regularizers=None,

    updates_collections=tf.GraphKeys.UPDATE_OPS,

    is_training=True,

    reuse=None,

    variables_collections=None,

    outputs_collections=None,

    trainable=True,

    batch_weights=None,

    fused=None,

    data_format=DATA_FORMAT_NHWC,

    zero_debias_moving_mean=False,

    scope=None,

    renorm=False,

    renorm_clipping=None,

    renorm_decay=0.99,

    adjustment=None

)

Batch Normalization通过减少内部协变量加速神经网络的训练。
可以用作conv2d和fully_connected的标准化函数。

参数:

1 inputs: 输入

2 decay :衰减系数。合适的衰减系数值接近1.0,特别是含多个9的值:0.999,0.99,0.9。如果训练集表现很好而验证/测试集表现得不好,选择

小的系数(推荐使用0.9)。如果想要提高稳定性,zero_debias_moving_mean设为True

3 center:如果为True,有beta偏移量;如果为False,无beta偏移量

4 scale:如果为True,则乘以gamma。如果为False,gamma则不使用。当下一层是线性的时(例如nn.relu),由于缩放可以由下一层完成,

所以可以禁用该层。

5 epsilon:避免被零除

6 activation_fn:用于激活,默认为线性激活函数

7 param_initializers : beta, gamma, moving mean and moving variance的优化初始化

8 param_regularizers : beta and gamma正则化优化

9 updates_collections :Collections来收集计算的更新操作。updates_ops需要使用train_op来执行。如果为None,则会添加控件依赖项以

确保更新已计算到位。

10 is_training:图层是否处于训练模式。在训练模式下,它将积累转入的统计量moving_mean并 moving_variance使用给定的指数移动平均值 decay。当它不是在训练模式,那么它将使用的数值moving_mean和moving_variance。
11 scope:可选范围variable_scope

注意:训练时,需要更新moving_mean和moving_variance。默认情况下,更新操作被放入tf.GraphKeys.UPDATE_OPS,所以需要添加它们作为依赖项train_op。例如:

 

  update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)  with tf.control_dependencies(update_ops):    train_op = optimizer.minimize(loss)

可以将updates_collections = None设置为强制更新,但可能会导致速度损失,尤其是在分布式设置中。

返回 该操作的输出API:https://tensorflow.google.cn/api_docs/python/tf/contrib/layers/batch_norm

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值