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)
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章