- tf.boolean_mask
- tf.broadcast_to
- tf.dynamic_partition
- tf.case
- tf.shape(a)
- tf.unstack(a,axis=)
- tf.stack([a,b],axis=)
- MutableHashTable
- tf.losses.log_loss
- tf.placeholder
- tf.nn.dynamic_rnn
- tf.reshape(tensor,shape,name=None)
- tf.nn.rnn_cell.MultiRNNCell.zero_state
- tf.train.ExponentialMovingAverage
- tf.nn.moments
- tf.contrib.rnn.BasicLSTMCell
- tf.nn.embedding_lookup
- tf.ones_like
- tf.where
- 参数
原文发表于:2021/12/31
tf.boolean_mask
tf.boolean_mask
函数的形式为:tf.boolean_mask(tensor, mask, axis=None, name=None)
。
tensor
:要进行掩码操作的输入张量。mask
:一个与tensor
形状兼容的布尔张量,用于指定要选择的元素。axis
(可选):指定在哪个轴上应用掩码。如果未指定,则默认使用所有轴。name
(可选):操作的名称。
用法示例:
import tensorflow as tf
# 创建一个示例张量
tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 创建一个布尔掩码
mask = tf.constant([[True, False, True], [False, True, False], [True, False, True]])
# 应用布尔掩码
result = tf.boolean_mask(tensor, mask)
print(result)
在上述示例中,tf.boolean_mask(tensor, mask)
将根据mask
中的True
值,从tensor
中选择相应的元素,得到结果为[[1, 3], [5], [7, 9]]
。
tf.broadcast_to
tf.broadcast_to
是TensorFlow中的一个函数,用于将输入张量广播到指定的形状。
广播(Broadcasting)是一种在TensorFlow中自动扩展张量维度的机制,它允许在进行算术运算时,对形状不同但相容的张量进行自动扩展,以使得它们能够进行运算。
tf.broadcast_to
函数的主要作用是将输入张量按照指定的形状进行广播扩展。它会根据需要自动复制元素,以使得输入张量的形状与指定的形状相匹配。
例如,如果有一个形状为(3, 1)
的张量,想要将其广播到形状为(3, 4)
,可以使用tf.broadcast_to
函数来实现:
import tensorflow as tf
# 创建一个形状为(3, 1)的张量
tensor = tf.constant([[1], [2], [3]])
# 将张量广播到形状为(3, 4)
broadcasted_tensor = tf.broadcast_to(tensor, (3, 4))
print(broadcasted_tensor)
在这个例子中,tf.broadcast_to
函数会将张量tensor
的每一行复制4次,从而得到形状为(3, 4)
的广播后的张量。
需要注意的是,广播操作在TensorFlow中是自动进行的,但在使用tf.broadcast_to
函数时,可以显式地进行广播操作,以确保张量的形状符合预期。此外,广播操作可能会导致内存使用增加,因此在使用时需要谨慎考虑。
tf.dynamic_partition
- 矩阵拆分
tf.case
import tensorflow as tf
x = tf.constant(7)
y = tf.constant(27)
z = tf.constant(21)
def f1():
return tf.constant(17)
def f2():
return tf.constant(23)
def f3():
return tf.constant(-1)
r = tf.case({tf.less(x, y): f1, tf.greater(x, z): f2},default=f3, exclusive=True);
参考:https://blog.csdn.net/AI_LX/article/details/89465395
tf.shape(a)
获取张量a各个方向上的维度。
tf.unstack(a,axis=)
将张量a根据axis从n+1维分解到n维
tf.stack([a,b],axis=)
将张量a,b根据axis合并
MutableHashTable
可以根据key,将张量a中的key替换成value的表,不会增加张量a的维度。
tf.losses.log_loss
tf.losses.log_loss
函数的主要参数如下:
labels
:真实标签,通常是一个二维张量,形状为[batch_size, num_classes]
,其中batch_size
是批次大小,num_classes
是类别数量。如果是二分类问题,labels
的形状可以是[batch_size, 1]
,其中的值为0或1。predictions
:预测值,通常是一个二维张量,形状与labels
相同,表示模型对每个样本属于每个类别的预测概率。weights
(可选):一个与labels
形状相同的张量,用于为每个样本分配权重。默认情况下,所有样本的权重都为1。reduction
(可选):指定损失的归约方式,可以是tf.losses.Reduction.NONE
(不进行归约,返回每个样本的损失)、tf.losses.Reduction.SUM_BY_NONZERO_WEIGHTS
(对非零权重的样本损失进行求和)、tf.losses.Reduction.SUM_OVER_BATCH_SIZE
(对所有样本的损失进行求和并除以批次大小)或tf.losses.Reduction.MEAN
(对所有样本的损失进行求平均)。默认值为tf.losses.Reduction.NONE
。
例如:
import tensorflow as tf
labels = tf.constant([[0, 1], [1, 0]], dtype=tf.float32)
predictions = tf.constant([[0.1, 0.9], [0.8, 0.2]], dtype=tf.float32)
loss = tf.losses.log_loss(labels, predictions)
print(loss)
tf.placeholder
函数
tf.placeholder(dtype, shape=None, name=None)
参数说明
dtype:数据类型。常用的是tf.float32,tf.float64等数值类型
shape:数据形状。默认是None,就是一维值,也可以是多维,比如[2,3], [None, 3]表示列是3,行不定
name:名称。
注意事项
此函数可以理解为形参,用于定义过程,在执行时需要赋具体的值。
示例
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)
with tf.Session() as sess:
print(sess.run(y)) # ERROR: 此处x还没有赋值.
rand_array = np.random.rand(1024, 1024)
print(sess.run(y, feed_dict={x: rand_array})) # Will succeed.
tf.nn.dynamic_rnn
tensorflow 的dynamic_rnn方法,我们用一个小例子来说明其用法,假设你的RNN的输入input是[2,20,128],其中2是batch_size,20是文本最大长度,128是embedding_size,可以看出,有两个example,我们假设第二个文本长度只有13,剩下的7个是使用0-padding方法填充的。dynamic返回的是两个参数:outputs,last_states,其中outputs是[2,20,128],也就是每一个迭代隐状态的输出,last_states是由(c,h)组成的tuple,均为[batch,128]。
到这里并没有什么不同,但是dynamic有个参数:sequence_length,这个参数用来指定每个example的长度,比如上面的例子中,我们令 sequence_length为[20,13],表示第一个example有效长度为20,第二个example有效长度为13,当我们传入这个参数的时候,对于第二个example,TensorFlow对于13以后的padding就不计算了,其last_states将重复第13步的last_states直至第20步,而outputs中超过13步的结果将会被置零。
tf.reshape(tensor,shape,name=None)
函数
tf.reshape(tensor,shape,name=None)
说明
函数的作用是将tensor变换为参数shape形式,其中的shape为一个列表形式,特殊的是列表可以实现逆序的遍历,即list(-1).-1所代表的含义是我们不用亲自去指定这一维的大小,函数会自动进行计算,但是列表中只能存在一个-1。(如果存在多个-1,就是一个存在多解的方程) 。
tf.nn.rnn_cell.MultiRNNCell.zero_state
tf.nn.rnn_cell.MultiRNNCell.zero_state(batch_size, dtype)
tf.train.ExponentialMovingAverage
tf.nn.moments
http://blog.csdn.net/u014595019/article/details/52805444
tf.contrib.rnn.BasicLSTMCell
BasicLSTMCell 是最简单的一个LSTM类,没有实现clipping,projection layer,peep-hole等一些LSTM的高级变种,仅作为一个基本的basicline结构存在,如果要使用这些高级变种,需用class tf.contrib.rnn.LSTMCell这个类。
使用方式
lstm = rnn.BasicLSTMCell(num_units, forget_bias=1.0, state_is_tuple=True)
参数说明
-
num_units: int, The number of units in the LSTM cell.
-
forget_bias: float, The bias added to forget gates.
-
state_is_tuple: If True, accepted and returned states are 2-tuples of the c_state and m_state. If False, they are concatenated along the column axis. The latter behavior will soon be deprecated.
-
activation: Activation function of the inner states.
tf.nn.embedding_lookup
代码
# -*- coding= utf-8 -*-
import tensorflow as tf
import numpy as np
a = [[0.1, 0.2, 0.3], [1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3], [4.1, 4.2, 4.3]]
a = np.asarray(a)
idx1 = tf.Variable([0, 2, 3, 1], tf.int32)
idx2 = tf.Variable([[0, 2, 3, 1], [4, 0, 2, 2]], tf.int32)
out1 = tf.nn.embedding_lookup(a, idx1)
out2 = tf.nn.embedding_lookup(a, idx2)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
print sess.run(out1)
print out1
print '=================='
print sess.run(out2)
print out2
输出
[[ 0.1 0.2 0.3]
[ 2.1 2.2 2.3]
[ 3.1 3.2 3.3]
[ 1.1 1.2 1.3]]
Tensor("embedding_lookup:0", shape=(4, 3), dtype=float64)
==================
[[[ 0.1 0.2 0.3]
[ 2.1 2.2 2.3]
[ 3.1 3.2 3.3]
[ 1.1 1.2 1.3]]
[[ 4.1 4.2 4.3]
[ 0.1 0.2 0.3]
[ 2.1 2.2 2.3]
[ 2.1 2.2 2.3]]]
Tensor("embedding_lookup_1:0", shape=(2, 4, 3), dtype=float64)
tf.ones_like
tf.where
tf.where
是 TensorFlow 库中的一个函数,它根据条件返回输入张量中元素的值。这个函数的工作原理类似于 Python 中的三元运算符 a if condition else b
,但是可以应用于整个张量。
函数的基本语法如下:
tf.where(condition, x, y, name=None)
condition
: 一个布尔类型(tf.bool
)的张量,表示要满足的条件。tf.where
会根据这个条件张量的每个元素的值来决定选择x
或y
。x
: 一个张量,当condition
为真时,返回这个张量的对应元素。y
: 一个张量,当condition
为假时,返回这个张量的对应元素。x
和y
的形状和数据类型必须相同。name
: (可选)为这个操作指定一个名称。
tf.where
返回的张量与 x
和 y
具有相同的形状和数据类型。
下面是 tf.where
函数的一个简单示例:
import tensorflow as tf
# 定义条件
condition = [True, False, True, False]
# 根据条件选择值
result = tf.where(condition, [1, 2, 3, 4], [10, 20, 30, 40])
# 查看结果
print(result)
结果为:tf.Tensor([ 1 20 3 40], shape=(4,), dtype=int32)
在这个示例中,tf.where
会返回一个新张量,其中包含根据 condition
的值从 x
或 y
中选择的元素。如果 condition
中的元素为 True
,则选择 x
中的对应元素;如果为 False
,则选择 y
中的对应元素。
请注意,示例中的张量需要具有相同的形状。如果条件张量与 x
和 y
的形状不匹配,你需要使用 tf.broadcast
来调整它们的形状。