一、合并与分割
1. tf.concat-合并-原有的维度上进行累加
concat操作需要满足除拼接维度外,其余维度均相等
2.tf.stack-合并-创造一个新的维度
stack操作需要Tensor维度均相等
3.tf.unstack-分割
不能指定打散的数量,只能按维度进行分割
4.tf.split-分割
可以指定打散的数量
二、数据统计操作
1.tf.norm—张量的范数
二范数
一范数
2.tf.reduce_max/min/mean/sum—张量的最大值、最小值、平均值、和
3.tf.argmax/argmin—张量最大值的位置与最小值的位置
4.tf.equal—张量的比较
5.tf.unique—张量的独特值
三、张量排序
1.tf.sort-排序/tf.argsort-排序并返回索引
2.tf.math.top_k-最大值的前几个
3.案例
# 将无关信息屏蔽掉
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
tf.random.set_seed(2467)
# output->[b,n] target->[b,]
def accuracy(output,target,topk=(1,)):
maxk = max(topk)
batch_size = target.shape[0]
# 返回最大值前maxk个的索引
pred = tf.math.top_k(output,maxk).indices
# 转置
pred = tf.transpose(pred,perm=[1,0])
# 将target广播成pred形状
target_ = tf.broadcast_to(target,pred.shape)
# 比较
correct = tf.equal(pred,target_)
res = []
for k in topk:
correct_k = tf.cast(tf.reshape(correct[:k],[-1]),dtype=tf.float32)
# print('123=',correct_k)
correct_k = tf.reduce_sum(correct_k)
acc = float(correct_k / batch_size)
res.append(acc)
return res
if __name__ == '__main__':
# 正态分布
output = tf.random.normal([10,6])
# 使6类概率总和为1
output = tf.math.softmax(output,axis=1)
# 均匀分布
target = tf.random.uniform([10],maxval=6,dtype=tf.int32)
print('prob:',output.numpy())
pred = tf.argmax(output,axis=1)