一、tensorflow经常要求张量最大值和张量最大值的位置,弄了好久才弄明白,今天分别介绍一下求最大值位置函数tf.argmax(x, axis = 0)与求张量最大值函数tf.reduce_max(x, axis = 0)
1. 在二维张量(axis=0,1/-1)使用这两个函数tf.argmax()和tf.reduce_max(),在二维张量的情况下,两个函数比较容易理解,参数axis=0,是对列取最大值或者对列求和,axis=1是对行取最大值或者是对行求和。栗子如下:
import numpy as np
import tensorflow as tf
x = tf.constant([
[2,4],
[6,1]
],tf.float32)
print(x.shape)
a=tf.argmax(x, axis = 0)
print("axis = 0 列最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 0)
print("axis = 0 列最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 1)
print("axis = 1 行最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 1)
print("axis = 1 行最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = -1)
print("axis = -1 行最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = -1 行最大值 "+str(sess.run(b)))
请注意看axis=0,1,-1的输出结果:
(2, 2)
axis = 0 列最大值位置 [1 0]
axis = 0 列最大值 [6. 4.]
axis = 1 行最大值位置 [1 0]
axis = 1 行最大值 [4. 6.]
axis = -1 行最大值位置 [1 0]
axis = -1 行最大值 [4. 6.]
2. 在三维张量(axis=0,1,2/-1)使用这两个函数tf.argmax()和tf.reduce_max(),在三维张量的情况下,两个函数比较抽象,可以想象成三通道的彩色图片,高为通道,参数axis=0,是对列取最大值或者对列求和,axis=1是对行取最大值或者是对行求和。栗子如下:
import numpy as np
import tensorflow as tf
x = tf.constant([
[[2,4],[4,1]],
[[6,8],[2,1]]
],tf.float32)
print(x.shape)
a=tf.argmax(x, axis = 0)
print("axis = 0 列最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 0)
print("axis = 0 列最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 1)
print("axis = 1 行最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 1)
print("axis = 1 行最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 2)
print("axis = 2 高最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = 2 高最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = -1)
print("axis = -1 高最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = -1 高最大值 "+str(sess.run(b)))
请注意看axis=0,1,2/-1的输出结果:想不出来的童鞋请仔细体会
(2, 2, 2)
axis = 0 列最大值位置 [[1 1]
[0 0]]
axis = 0 列最大值 [[6. 8.]
[4. 1.]]
axis = 1 行最大值位置 [[1 0]
[0 0]]
axis = 1 行最大值 [[4. 4.]
[6. 8.]]
axis = 2 高最大值位置 [[1 0]
[1 0]]
axis = 2 高最大值 [[4. 4.]
[8. 2.]]
axis = -1 高最大值位置 [[1 0]
[1 0]]
axis = -1 高最大值 [[4. 4.]
[8. 2.]]
2. 在四维张量(axis=0,1,2,3/-1)使用这两个函数tf.argmax()和tf.reduce_max(),在四维张量的情况下,可以理解为m张彩色图片叠加,层=m,高为通道,如果理解了三维张量,四维张量只有一点不同,就是多了一个维度,但是axis=0不在表示列方向。栗子如下:(请仔细理解,建议画图帮助理解)
import numpy as np
import tensorflow as tf
x = tf.constant([
[
[[2,5],[4,3]],
[[6,1],[1,1]]
],
[
[[3,9],[5,7]],
[[7,5],[2,6]]
]
],tf.float32)
print(x.shape)
a=tf.argmax(x, axis = 0)
print("axis = 0 层最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 0)
print("axis = 0 层最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 1)
print("axis = 1 列最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = 1)
print("axis = 1 列最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 2)
print("axis = 2 行最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = 2 行最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = 3)
print("axis = 3 高最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = 3 高最大值 "+str(sess.run(b)))
a=tf.argmax(x, axis = -1)
print("axis = -1 高最大值位置 "+str(sess.run(a)))
b=tf.reduce_max(x, axis = -1)
print("axis = -1 高最大值 "+str(sess.run(b)))
请注意看axis=0,1,2,3/-1的输出结果:想不出来的童鞋请仔细体会
(2, 2, 2, 2)
[[[[2. 5.]
[4. 3.]]
[[6. 1.]
[1. 1.]]]
[[[3. 9.]
[5. 7.]]
[[7. 5.]
[2. 6.]]]]
a = [[[1 1]
[1 1]]
[[1 1]
[1 1]]]
b = [[[3. 9.]
[5. 7.]]
[[7. 5.]
[2. 6.]]]
(2, 2)
a = [1 0]
b = [6. 4.]
(2, 2)
axis = 0 列最大值位置 [1 0]
axis = 0 列最大值 [6. 4.]
axis = 1 行最大值位置 [1 0]
axis = 1 行最大值 [4. 6.]
axis = -1 行最大值位置 [1 0]
axis = -1 行最大值 [4. 6.]
(2, 2, 2)
axis = 0 列最大值位置 [[1 1]
[0 0]]
axis = 0 列最大值 [[6. 8.]
[4. 1.]]
axis = 1 行最大值位置 [[1 0]
[0 0]]
axis = 1 行最大值 [[4. 4.]
[6. 8.]]
axis = 2 高最大值位置 [[1 0]
[1 0]]
axis = 2 高最大值 [[4. 4.]
[8. 2.]]
axis = -1 高最大值位置 [[1 0]
[1 0]]
axis = -1 高最大值 [[4. 4.]
[8. 2.]]
(2, 2, 2, 2)
axis = 0 层最大值位置 [[[1 1]
[1 1]]
[[1 1]
[1 1]]]
axis = 0 层最大值 [[[3. 9.]
[5. 7.]]
[[7. 5.]
[2. 6.]]]
axis = 1 列最大值位置 [[[1 0]
[0 0]]
[[1 0]
[0 0]]]
axis = 1 列最大值 [[[6. 5.]
[4. 3.]]
[[7. 9.]
[5. 7.]]]
axis = 2 行最大值位置 [[[1 0]
[0 0]]
[[1 0]
[0 1]]]
axis = 2 行最大值 [[[5. 4.]
[6. 1.]]
[[9. 7.]
[7. 6.]]]
axis = 3 高最大值位置 [[[1 0]
[0 0]]
[[1 1]
[0 1]]]
axis = 3 高最大值 [[[5. 4.]
[6. 1.]]
[[9. 7.]
[7. 6.]]]
axis = -1 高最大值位置 [[[1 0]
[0 0]]
[[1 1]
[0 1]]]
axis = -1 高最大值 [[[5. 4.]
[6. 1.]]
[[9. 7.]
[7. 6.]]]
今天的内容写完啦(其实是昨天考虑的,今天兴致来了,打算记录一下学习tensorflow的笔记,顺便帮助大家理解),准备真正的今天的内容啦!如有不对,欢迎指正!