每天学一点tensorflow——tf.argmax(x, axis = 0)和tf.reduce_max(x, axis = 0)

day1:tf.argmax(x, axis = 0)和tf.reduce_max(x, axis = 0)

今天学习的这两个函数可以考虑为一大类函数,比如reduce_sum()计算张量的和,reduce_mean()计算张量的平均值,reduce_max()和reduce_min()计算张量的最大值和最小值,以及argmax()和argmin()计算张量最大和最小值的位置索引,会使用这两个函数,其他函数使用起来也会得心应手。

一、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的笔记,顺便帮助大家理解),准备真正的今天的内容啦!如有不对,欢迎指正!

你可能感兴趣的:(每天学一点tensorflow——tf.argmax(x, axis = 0)和tf.reduce_max(x, axis = 0))