tf.norm、tf.equal和tf.unique

import tensorflow as tf

'''
L2范数  sqrt(∑kXk^2)
无穷范数 abs(max(Xk))
L1范数 sum(abs(Xk))
'''
a = tf.ones([2,2])
print(tf.norm(a)) # tf.norm算的是L2范数

#等价于
print(tf.sqrt(tf.reduce_sum(tf.square(a)))) #这里reduce_sum求和,将一个tensor转换成了一个标量,当然就是reduce

## 可以通过ord来指定进行多少范数,可以通过axis来指定在哪个维度进行范数
b = tf.norm(a, ord=2, axis=1)#指定为L2范数,在axis=1进行范数
print(b)
c = tf.norm(a, ord=1, axis=0)
print(c)

d = tf.random.normal([5,5])
print(tf.reduce_min(d), tf.reduce_max(d), tf.reduce_mean(d), tf.reduce_sum(d))
# 可以通过axis指定在某一个维度进行相应的操作

# 通过tf.argmax和tf.argmin寻求tensor中的最大值或最小值的索引
t = tf.random.normal([3,5])
print("----------------------")
print(t)
print("----------------------")
a = tf.argmax(t) #当不设置axis的时候默认axis=0
t_axis_1 = tf.argmax(t, axis=1)
print(t_axis_1.shape)
print(a.shape)
print(a)

min_index = tf.argmin(t)


### 比较结果正确的个数
'''
先进行equal,在将结果进行cast成整数,最后使用reduce_sum进行统计
'''
y_0 = tf.constant([1,2,2,2,1])
y_1 = tf.range(5)
res = tf.equal(y_0, y_1)
print("res:", res)
correct_res = tf.reduce_sum(tf.cast(res, dtype=tf.int32))
print("correct:",correct_res)

## task1 求输出tensor结果与实际结果中正确率

c_t_0 = tf.constant([[0.1,0.2,0.3,0.4],[0.7,0.2,0.05,0.05]], dtype=tf.float32)
result = tf.constant([3,2])
c_t_res = tf.argmax(c_t_0, axis=1)
cp_reslut = tf.equal(tf.cast(c_t_res, dtype=tf.int32), result)
res_num = tf.reduce_sum(tf.cast(cp_reslut,dtype=tf.int32))
print(res_num / len(result))
## task2 理解tf.unique
'''
tf.unique可以将tensor分成值和索引
'''
tt = tf.constant([1,2,2,2,3])
x,y = tf.unique(tt)
print(x)
print(y)
posted @ 2021-03-12 20:37  cyssmile  阅读(1202)  评论(0编辑  收藏  举报