tensorflow中的函数随手记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Coulson_Zhao/article/details/87884951

tf.concat

tf.concat 起到的是拼接的作用,函数主要有两个参数,分别是 axis 和 values。这两个参数 axis 起到确定相加方向的作用,values 起到给出待相加参数的作用。
axis 这个参数常见有 0和1,即指定相加方向。0 指的是列相加;1 指的是行相加。理论上还有 -1 这个参数,但一般用不上。要注意的是,若要列相加,则两个向量的行应相同;若行相加,则向量的列应当相同。
例如说:
给出两个向量,他们的 shape 分别为 (2, 2) 和 (2, 2),行相加之后就是 (4, 2),列相加之后就是 (2, 4)
我们有:

t1 = [[1, 2, 3], [4, 5, 6]]
t2 = [[7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 0)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
tf.concat([t1, t2], 1)  # [[1, 2, 3, 7, 8, 9], [4, 5, 6, 10, 11, 12]]

tf.argmax

tf.argmax 起到的是比较大小的作用,它进行比较的顺序先宽后高以深度为标准进行比较。
也就是说,这个函数的输出值的 shape 即为你输入值的宽和高。它会为你比较在同一宽高处不同深度的值的大小,并且把最大值的位置返回给你。例如:

n = np.random.randn(3,4,2)
res = tf.argmax(n)
# res.shape = (4,2)

n = np.random.randn(2,3,4)
res = tf.argmax(n)
# res.shape = (3,4)

返回值的形式如下所示:

sess.run(res)
array([[1, 0, 1, 1],
       [1, 0, 1, 1],
       [0, 1, 1, 0]], dtype=int64)

numpy中数组的使用注意

当你在numpy中定义一个随机数组的时候,例如 ex

>>> ex = np.random.randn(1, 2, 2, 3)
>>> ex
array([[[[ 0.15811279,  0.91209517, -3.47016142],
         [ 0.23840981,  1.6852879 , -0.68669106]],

        [[-1.13691608, -1.4908408 , -1.09036246],
         [-0.00371591,  0.68245959, -1.63700518]]]])

若我们此时使用这种选择数组第一列的时候,就会得到下列结果。看着好像不是那么对,0.23怎么跑到 [0, 0, 1] 的位置去了

>>> sub = ex[:, :, :, 0]
>>> sub
array([[[ 0.15811279,  0.23840981],
        [-1.13691608, -0.00371591]]])

那么这时候,我们如果想得到和 ex 相同的位置,就需要像这样:

>>> sub = ex[:, :, :, 0:1]
>>> sub
array([[[[ 0.15811279],
         [ 0.23840981]],

        [[-1.13691608],
         [-0.00371591]]]])

就可以得到正确的结果了。要注意的是,0:1 代表的是第一列,也就是数组下标为0的那一列。
另外的是,在使用 numpy 进行数组的 reshape 操作的时候,reshape 的取值顺序是先行后列最后是深度,最后是样本数量

猜你喜欢

转载自blog.csdn.net/Coulson_Zhao/article/details/87884951
今日推荐