TensorFlow常见函数用法

一、tf.stack()  矩阵拼接函数,即将秩为 R 的张量列表堆叠成一个秩为 (R+1) 的张量。

axis=0在横轴上进行合并,axis=1 代表在纵轴上进行合并

将 values 中的张量列表打包成一个张量,该张量比 values 中的每个张量都高一个秩,通过沿 axis 维度打包。给定一个形状为(A, B, C)的张量的长度 N 的列表;

  • 如果 axis == 0,那么 output 张量将具有形状(N, A, B, C)。
  • 如果 axis == 1,那么 output 张量将具有形状(A, N, B, C)。
  • 如果 axis == 2,那么 output 张量将具有形状( A, B, N, C)。
  • 如果 axis == 3,那么 output 张量将具有形状(A, B, C, N)。
import sys
import os
import json
import numpy as np
import tensorflow as tf

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

a= tf.stack([t1, t2],axis=0)
a= tf.stack([t1, t2],axis=1)


with tf.Session() as sess:
    print(sess.run(a))
    print(sess.run(b))


==================================================
a:
[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

b:
[[[ 1  2  3]
  [ 7  8  9]]

 [[ 4  5  6]
  [10 11 12]]]

二、tf.unstack() 是一个拆分矩阵的函数,将秩为 R 的张量的给定维度出栈为秩为 (R-1) 的张量。

通过沿 axis 维度将 num 张量从 value 中分离出来。如果没有指定 num(默认值),则从 value 的形状推断。如果 value.shape[axis] 不知道,则引发 ValueError。

例如,给定一个具有形状 (A, B, C, D) 的张量。

  • 如果 axis == 0,那么 output 中的第 i 个张量就是切片 value[i, :, :, :],并且 output 中的每个张量都具有形状 (B, C, D)。(请注意,出栈的维度已经消失,不像split)。 
  • 如果 axis == 1,那么 output 中的第 i 个张量就是切片 value[:, i, :, :],并且 output 中的每个张量都具有形状 (A, C, D)。 

这与堆栈(stack.)相反

三、tf.split() 与 tf.stack()

import tensorflow as tf

A = [[1, 2, 3], [4, 5, 6]]
a0 = tf.split(A, num_or_size_splits=3, axis=1)#不改变维数(!!)
a1 = tf.unstack(A, num=3,axis=1)
a2 = tf.split(A, num_or_size_splits=2, axis=0)
a3 = tf.unstack(A, num=2,axis=0)
with tf.Session() as sess:
    print(sess.run(a0))
    print(sess.run(a1))
    print(sess.run(a2))
    print(sess.run(a3))

--------------------------------------------------
输出:
a0: [array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]
a1: [array([1, 4]), array([2, 5]), array([3, 6])] 
a2: [array([[1, 2, 3]]), array([[4, 5, 6]])] 
a3: [array([1, 2, 3]), array([4, 5, 6])]

四、tf.pad

 tf.pad(tensor, paddings, mode="CONSTANT", name=None, constant_values=0): 

tensor:就是输入,paddings,就是需要扩张的维度,后面其他的参数的可以不管

tf.pad()就是扩充维度,比如

t=tf.constant([1,2,3])

paddings=[a,b,c,d],分别从不同维度加0,因为是一维向量,所以tf.pad(t,[[1,1]])只能从左右加0输出结果为[[0 1 2 3 0]],

当t=tf.constant([[1,2,3]])时,则是一个二维矩阵,就加了一个[],shape=(1,3)

[   [0 0 0 0 0 0 0]
    [0 0 1 2 3 0 0]

    [0 0 0 0 0 0 0]   ]

如果a=[1,1],b=[2,2],则上下加一排0,左右加2排0,结果为

在二维上面加0,当c=[1,1],t=tf.constant( [[[1,2,3], [2,3,4],[2,1,4]],
                                                                    [[1,2,3], [2,3,4],[2,1,4]],

                                                                    [[1,2,3],  [2,3,4],[2,1,4]]])

时,即paddings=[[1,1],[2,2],[1,1]]输出为下面所示,shape=(3,3,3)变成了(5,7,5)
 

发布了70 篇原创文章 · 获赞 73 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/yunge812/article/details/90769666