原文发表于: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函数的主要参数如下:

  1. labels:真实标签,通常是一个二维张量,形状为[batch_size, num_classes],其中batch_size是批次大小,num_classes是类别数量。如果是二分类问题,labels的形状可以是[batch_size, 1],其中的值为0或1。
  2. predictions:预测值,通常是一个二维张量,形状与labels相同,表示模型对每个样本属于每个类别的预测概率。
  3. weights(可选):一个与labels形状相同的张量,用于为每个样本分配权重。默认情况下,所有样本的权重都为1。
  4. 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 会根据这个条件张量的每个元素的值来决定选择 xy
  • x: 一个张量,当 condition 为真时,返回这个张量的对应元素。
  • y: 一个张量,当 condition 为假时,返回这个张量的对应元素。xy 的形状和数据类型必须相同。
  • name: (可选)为这个操作指定一个名称。

tf.where 返回的张量与 xy 具有相同的形状和数据类型。

下面是 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 的值从 xy 中选择的元素。如果 condition 中的元素为 True,则选择 x 中的对应元素;如果为 False,则选择 y 中的对应元素。

请注意,示例中的张量需要具有相同的形状。如果条件张量与 xy 的形状不匹配,你需要使用 tf.broadcast 来调整它们的形状。

参数