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)
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光非宅男

你的鼓励是我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值