Tensorflow 2.0 常用函数

Tensorflow 2.0 常用函数及属性

文章目录

  • Tensorflow 2.0 常用函数及属性
      • tf.cast
      • tf.reduce_min
      • tf.reduce_max
      • 属性 axis
      • tf.reduce_mean()
      • tf.reduce_sum()
      • tf.Variable
      • Tensorflow 常用数学运算函数
      • tf.data.Dataset.from_tensor_slice
      • tf.GradientTape
      • enumerate
      • tf.one_hot
      • tf.nn.softmax
      • assign_sub
      • tf.argmax

tf.cast

强制tensor转换为设定数据类型

tf.cast(x, dtype, name=None)

# e.g.
x = tf.constant([1.8, 2.2], dtype=tf.float32)
tf.dtypes.cast(x, tf.int32) #

tf.reduce_min

取出张量中的最小值

tf.math.reduce_min(input_tensor, axis=None, keepdims=False, name=None)

# e.g.
a = tf.constant([[1, 2], [3, 4]])
tf.reduce_min(a) #tf.Tensor(1, shape=(), dtype=int32)

tf.reduce_max

取出张量中的最大值

tf.math.reduce_max(input_tensor, axis=None, keepdims=False, name=None)

# e.g.
x = tf.constant([5, 1, 2, 4])
print(tf.reduce_max(x)) #tf.Tensor(5, shape=(), dtype=int32)

属性 axis

axis = 0 对第一个维度进行操作

axis = 1 对第二个维度进行操作

在二维张量即矩阵中

axis = 0 表示跨行进行操作

axis = 1 表示跨列进行操作

tf.reduce_mean()

计算张量中所有元素的平均值

tf.reduce_mean(input_tensor, axis=None, keepdims=False, name=None)

# e.g.
x = tf.constant([[1, 2, 3],[2, 2, 2]])
print(tf.reduce_mean(x))	# tf.Tensor(2, shape=(), dtype=int32)

x = tf.constant([[1, 2, 3],[2, 2, 3]])
#由于为int型结果会向下取整
print(tf.reduce_mean(x))	# tf.Tensor(2, shape=(), dtype=int32) 

tf.reduce_sum()

对张量按某一维度进行求和

tf.math.reduce_sum(input_tensor, axis=None, keepdims=False, name=None)

# e.g.
x = tf.constant([[1, 2, 3],[2, 2, 3]])
# 列求和
print(tf.reduce_sum(x, axis = 1)) #	tf.Tensor([6 7], shape=(2,), dtype=int32)
# 行求和
print(tf.reduce_sum(x, axis = 0)) #	tf.Tensor([3 4 6], shape=(3,), dtype=int32)

tf.Variable

将变量标记为可训练,被标记的变量会在反向传播中中记录梯度信息。在神经网络的训练中常用该函数标记待训练参数

tf.Variable(
    initial_value=None, trainable=None, validate_shape=True, caching_device=None,
    name=None, variable_def=None, dtype=None, import_scope=None, constraint=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE, shape=None
)

# e.g.
w = tf.Variable([[1.], [2.]]) # 待训练参数
x = tf.constant([[3., 4.]])
print(tf.matmul(w, x)) 
"""
tf.Tensor(
[[3. 4.]
 [6. 8.]], shape=(2, 2), dtype=float32)
"""

Tensorflow 常用数学运算函数

对应元素的四则运算:tf.add,tf.subtract,tf.multiply,tf.divide(只有维度相同的张量才可以进行四则运算)

tf.add(x, y, name=None) # 两张量对应元素相加
tf.subtract(x, y, name=None) #两张量对应元素相减
tf.multiply(x, y, name=None) #两张量对应元素相乘
tf.divide(x, y, name=None) #两张量对应元素相除

#e.g.
a = tf.constant([[5, 1], [2, 4]])
b = tf.constant([[3, -1], [0, 9]])
print(tf.add(a, b))
print(tf.subtract(a, b))
print(tf.multiply(a, b))
print(tf.divide(a, b))
print(tf.divide(b, a))
"""
tf.Tensor(
[[ 8  0]
 [ 2 13]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[ 2  2]
 [ 2 -5]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[15 -1]
 [ 0 36]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[ 1.66666667 -1.        ]
 [ inf  0.44444444]], shape=(2, 2), dtype=float64)
tf.Tensor(
[[ 0.6  -1.  ]
 [ 0.    2.25]], shape=(2, 2), dtype=float64)
"""

平方、次方与开方:tf.square,tf.pow,tf.sqrt

tf.square(x, name=None) 		# 对张量中的每一元素进行平方运算
tf.pow(x, y, name=None)			# 对张量中的每一元素进行次方运算
tf.sqrt(x, name=None) 			# 对张量中的每一元素进行开方运算


# e.g.
a = tf.constant([[5, 1], [2, 4]])
print(tf.square(a)) 
print(tf.pow(a, 3)) 
a = tf.cast(a, dtype=tf.float32) # 在进行开方操作前将张量的数据类型强制转换为浮点型
print(tf.sqrt(a))
"""
tf.Tensor(
[[25  1]
 [ 4 16]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[125   1]
 [  8  64]], shape=(2, 2), dtype=int32)
tf.Tensor(
[[2.236068  1.       ]
 [1.4142135 2.       ]], shape=(2, 2), dtype=float32)
"""

矩阵相乘:tf.matmul

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
)

# e.g.
a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
print(a)  
"""
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)
"""
b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
print(b)  
"""
tf.Tensor(
[[ 7  8]
 [ 9 10]
 [11 12]], shape=(3, 2), dtype=int32)
"""
c = tf.matmul(a, b)
print(c)
"""
tf.Tensor(
[[ 58  64]
 [139 154]], shape=(2, 2), dtype=int32)
"""

tf.data.Dataset.from_tensor_slice

切分传入张量的第一维度,生成输入 feature / label 对,常用于构建数据集。(Numpy 与 Tensor 格式都可用该语句读入数据)

dataset = tf.data.Dataset.from_tensor_slices((feature, label))

# e.g.
feature = tf.constant([[1, 2, 3],[2, 4, 5]])
label = tf.constant([[0], [1]])

dataset = tf.data.Dataset.from_tensor_slices((feature, label))
for element in dataset:
  print(element)
"""
(, )
(, )
"""

tf.GradientTape

和 with 结构配合使用记录计算过程,gradient 求出张量的梯度。详细的参数设置请见另一篇博客:

GradientTape函数参数解读

tf.GradientTape(persistent=False, watch_accessed_variables=True)

# e.g.
with tf.GradientTape() as tape:
	w = tf.Variable(tf.constant(3.0))
	loss = tf.pow(w, 2)
grad = tape.gradient(loss, w)
print(grad) # tf.Tensor(6.0, shape=(), dtype=float32)

enumerate

python 内建函数,它可遍历每个元素(如列表,元组,字符串),组合为:索引 元素,常在 for 循环中使用。

enumerate(iterable, start=0)

# e.g.
seq = ["one", "two", "three"]
for i, element in enumerate(seq):
    print(i, element)
"""
0 one
1 two
2 three
"""

tf.one_hot

独热编码(one-hot encoding),在分类问题中常用,独热码做标签

该函数将待转换数据,转换为 one-hot 形式的数据输出

tf.one_hot(
    indices, depth, on_value=None, off_value=None, axis=None, dtype=None, name=None
)

# e.g.
classes = 3 # 总类别数
labels = tf.constant([1, 0, 2])
output = tf.one_hot(labels, depth = classes)
print(output)
"""
tf.Tensor(
[[0. 1. 0.]
 [1. 0. 0.]
 [0. 0. 1.]], shape=(3, 3), dtype=float32)
"""

tf.nn.softmax

使共 n 个类别的分类任务的 n 个输出满足概率分布,原理是如下数学公式:
p ( y i ) = e y i ∑ i = 0 n e y i p(y_{i}) = \frac{e^{y_{i}}}{\sum_{i=0}^{n}e^{y_{i}}} p(yi)=i=0neyieyi
and
∑ i = 0 n p ( y i ) = 1 \sum_{i=0}^{n}p(y_{i}) = 1 i=0np(yi)=1

tf.nn.softmax(logits, axis=None, name=None)

# e.g.
y = tf.constant([1.01, 2.01, -0.66])
y_probability = tf.nn.softmax(y)
print(y_probability)
"""
tf.Tensor([0.25598174 0.69583046 0.0481878 ], shape=(3,), dtype=float32)
"""

assign_sub

赋值操作,更新参数并返回

调用该函数之前必须先用 tf.Variable 定义变量为可训练(可自更新)

assign_sub(value) 

# e.g.
w = tf.Variable(4)
w.assign_sub(1)
print(w) # 

tf.argmax

返回张量沿指定维度的最大值的索引

tf.argmax(input, axis=None, output_type=tf.dtypes.int64, name=None)

# e.g.
import numpy as np
test = np.array([[1, 2, 3],[2, 3, 4],[5, 4, 3]])
print(test)
print(tf.argmax(test, axis=0)) # 每列最大值的索引
print(tf.argmax(test, axis=1)) # 每行最大值的索引
"""
[[1 2 3]
 [2 3 4]
 [5 4 3]]
tf.Tensor([2 2 1], shape=(3,), dtype=int64)
tf.Tensor([2 2 0], shape=(3,), dtype=int64)
"""

参考文献:

北京大学 人工实践 Tensorflow 2.0 笔记

Tensorflow 官方API文档

你可能感兴趣的:(Tensorflow2.0,API,机器学习,tensorflow,深度学习,python,神经网络)