Skip to main content

tf.slice用法

函数:tf.slice(inputs, begin, size, name)
作用:从列表、数组、张量等对象中抽取一部分数据
begin和size是两个多维列表,他们共同决定了要抽取的数据的开始和结束位置
begin表示从inputs的哪几个维度上的哪个元素开始抽取 ,begin基于下标0开始
size表示在inputs的各个维度上抽取的元素个数
若begin[]或size[]中出现-1,表示抽取对应维度上的所有元素
测试:如下是一个三维Tensor数据表

import tensorflow as tf
import numpy as np
#这个代码演示测试tf.slice函数
t=[[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]],[[5,5,5],[6,6,6]]]
s1=tf.slice(t,[1,0,0],[1,1,3])
#begin=[1,0,0],表明从第1维的[0,0]开始切片,也就是从[3,3,3]开始
#size=[1,1,3]表明切片后是1维,切片的尺寸为1行3列。
s2=tf.slice(t,[0,1,1],[2,1,1])
#begin=[0,1,1],表明从第0维的[1,1]开始切片,也就是从[2,2,2]的第二个2开始
#size=[2,1,1]表明切片后是2维,切片的尺寸为1行1列。

sess=tf.Session()
print(sess.run(s1))
#输出结果为[[[3 3 3]]],一行三列
print(sess.run(s2))
#输出结果:
[[[2]] [[4]]]
#测试维度:
print(sess.run(s1).shape)
print(sess.run(s2).shape)
#结果如下
(1, 1, 3) (2, 1, 1)
下面的立体图说明切片的实际方法:
(size的大小不能大于切片刀下方表格数据的尺寸,维度数不能大于被切片数据的维度)
以s2为例

Comments

Popular posts from this blog

Session Run的用法

feed_dict参数的作用是替换图中的某个tensor的值。例如: a = tf.add(2, 5)                        #a=7 b = tf.multiply(a, 3)                 #b=3*7=21 with tf.Session() as sess:     print(sess.run(b))     replace_dict = {a:15}           #用15代替b算式中的a     print(sess.run(b, feed_dict = replace_dict)) --------------------- 输出如下: 21 45

tf.split用法

按照行或者列分割一个矩阵 第一个参数是待切分的张量,第二个是切分的大小,共切分为三个,每一个分别为4列,15列,11列。第三个参数为1表示按照列切分,为0表示按照行切分。 切分的子块的大小加起来应该等于母块的大小。比如这个例子,4+15+11=30列 看下面的代码例子

谈axis

Python和TF张量计算中经常见的形参,代表什么意思呢?     首先请看一下官方帮助的解释:     轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。如下图     注意看,官方对于0和1的解释是轴,也就是坐标轴。而坐标轴是有方向的,所以千万不要用行和列的思维去想axis,因为行和列是没有方向的,这样想会在遇到不同的例子时感到困惑。     根据官方的说法,1表示横轴,方向从左到右;0表示纵轴,方向从上到下。当axis=1时,数组的变化是横向的,而体现出来的是列的增加或者减少。我们拿图形举个例子:     我们有一个正方形,假设是4x4的     接下来我们让他横向增加一个单位,也就是长度+1,变成了一个5x4的长方形 也就是说,对于这个4x4的正方形而言,当axis=1时,体现的是横向的长度+1,而如果这是一个4行4列的二维数组同样也是如此,但是体现出来是增加了一列。     所以其实axis的重点在于方向,而不是行和列。具体到各种用法而言也是如此。当axis=1时,如果是求平均,那么是从左到右横向求平均;如果是拼接,那么也是左右横向拼接;如果是drop,那么也是横向发生变化,体现为列的减少。 当考虑了方向,即axis=1为横向,axis=0为纵向,而不是行和列,那么所有的例子就都统一了。题主的疑问也就迎刃而解。