版权声明:本文为博主原创文章,未经博主允许不得转载。 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 的取值顺序是先行后列最后是深度,最后是样本数量