TensorFlow 函数用法讲解

这篇博客详细介绍了TensorFlow中五个重要的张量操作:tf.split用于切割张量,tf.transpose实现张量维度交换,tf.concat在指定维度连接张量,tf.reshape转换张量维度,tf.pad进行张量值填充。内容涵盖了这些操作的使用方法和参数解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.tf.split  切割张量

2.tf.transpose 张量指定维度交换

3. tf.concat 指定维度连接

4.tf.reshape(tensor,shape,name) 转换维度

5. tf.pad(tensor,paddings,mode,name,constant_values) 张量值填充


1.tf.split  切割张量

API原型(TensorFlow 1.8.0):

tf.split(
    value,
    num_or_size_splits,
    axis=0,
    num=None,
    name='split'
)

这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。 
value传入的就是需要切割的张量。 
这个函数有两种切割的方式:比如说一个20 * 30 * 40的张量

有两种切割方式: 
1. 如果num_or_size_splits传入的是一个整数,这个整数代表这个张量最后会被切成几个小张量。此时,传入axis的数值就代表切割哪个维度(从0开始计数)。调用tf.split(my_tensor, 2,0)返回两个10 * 30 * 40的小张量。 
2. 如果num_or_size_splits传入的是一个向量,那么向量有几个分量就分成几份,切割的维度还是由axis决定。比如调用tf.split(my_tensor, [10, 5, 25], 2),则返回三个张量分别大小为 20 * 30 * 10、20 * 30 * 5、20 * 30 * 25。很显然,传入的这个向量各个分量加和必须等于axis所指示原张量维度的大小 (10 + 5 + 25 = 40)。

2.tf.transpose 张量指定维度交换

tf.transpose(input, [dimension_1, dimenaion_2,..,dimension_n]):这个函数主要适用于交换输入张量的不同维度用的,如果输入张量是二维,就相当是转置。dimension_n是整数,如果张量是三维,就是用0,1,2来表示。这个列表里的每个数对应相应的维度。如果是[2,1,0],就把输入张量的第三维度和第一维度交换。

import tensorflow as tf
import numpy as np

A = np.array([[1, 2, 3], [4, 5, 6]])
x = tf.transpose(A, [1, 0])

with tf.Session() as sess:
    print(A)
    print(sess.run(x))
    print(A.shape, x.shape)

输出:

[[1 2 3]
 [4 5 6]]
[[1 4]
 [2 5]
 [3 6]]
(2, 3) (3, 2)

3. tf.concat 指定维度连接

tf.concat(concat_dim, values, name='concat')   在指定维度,连接多个向量

import tensorflow as tf
# tensor t3 with shape [2, 3]
# tensor t4 with shape [2, 3]
tf.shape(tf.concat(0, [t3, t4])) ==> [4, 3]
tf.shape(tf.concat(1, [t3, t4])) ==> [2, 6]

4.tf.reshape(tensor,shape,name) 转换维度

inputss = tf.reshape(inputs, [-1, 2*H]) # inputs [B,T,2H] -> [B*T,2H]
ip = tf.matmul(inputss, w)              # ip [B*T,2H]*[2H,4]=[B*T,4]
ip = tf.reshape(ip, [-1, t, num_tags])  # ip [B*T,4]->[B,T,4]

5. tf.pad(tensor,paddings,mode,name,constant_values) 张量值填充

tensor是要填充的张量

padings 也是一个张量,代表每一维填充多少行/列,但要求它的rank一定要和tensor的rank一样

mode 可以取三个值,分别是"CONSTANT" ,"REFLECT","SYMMETRIC"

mode="CONSTANT" 是填充0

mode="REFLECT"是映射填充,上下(1维)填充顺序和paddings是相反的,左右(零维)顺序补齐

mode="SYMMETRIC"是对称填充,上下(1维)填充顺序是和paddings相同的,左右(零维)对称补齐

constant_values 指定mode=constant 时,填充的值

t=[[2,3,4], [5,6,7]]

sess.run(tf.pad(t, [[1,2],[2,3]], mode="CONSTANT"))
输出结果为:
array([[0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 2, 3, 4, 0, 0, 0],
          [0, 0, 5, 6, 7, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)

可以看到,上,下,左,右分别填充啦1,2,2,3行,刚好和paddings=[[1,2],[2,3]]相等,零填充

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值