TensorFlow slice方法详解

大家好,我是石璞东。

该方法经常用在对数据的预处理过程中,但是关于slice()方法切割的具体思路,官网的教程实在令人费解,所以在本文中我将对slice()方法做下总结,请看本文。

参考资料

  1. TensorFlow.js文档:https://js.tensorflow.org/api/latest/

1. 构造数据

在本小节中我将介绍6种创建不同维度张量的方法,请看示例:

  1. tf.tensor(values,shape?,dtype?)
    该方法可以构造出一个给定值、形状和数据类型的张量,请看参数介绍:

values:该参数表示张量的值,可以是nested array of numbersflat arrayTypedArray
shape:该参数表示张量的形状,为可选参数;
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32int32boolcomplex64string

接下来,我们看几个简单的案例,请看代码:

  • Pass an array of values to create a vector.
tf.tensor([1, 2, 3, 4]).print();

请看结果:

Tensor
    [1, 2, 3, 4]
  • Pass a nested array of values to make a matrix or a higher dimensional tensor.
tf.tensor([[1, 2], [3, 4]]).print();

请看结果:

Tensor
    [[1, 2],
     [3, 4]]
  • Pass a flat array and specify a shape yourself.
tf.tensor([1, 2, 3, 4], [2, 2]).print();

请看结果:

Tensor
    [[1, 2],
     [3, 4]]
  1. tf.scalar(value,dtype?)
    该方法可以构造出给定值和数据类型的0维张量,即一个标量,请看参数介绍:

value:该参数表示标量的值,其值可以是numberbooleanstringUnit8Array
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32int32boolcomplex64string

接下来,我们看一个简单的案例,请看代码:

tf.scalar(3.14).print();

请看结果:

Tensor
    3.140000104904175
  1. tf.tensor1d(values,dtype?)
    该方法可以构造出给定值、形状和数据类型的1维张量,它同样也可以被tf.tensor()方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:

values:该参数表示张量的值,其值可以是numbersTypedArray
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32int32boolcomplex64string

接下来,我们看一个简单的案例,请看代码:

tf.tensor1d([1, 2, 3]).print();

请看结果:

Tensor
    [1, 2, 3]
  1. tf.tensor2d(values,shape?,dtype?)
    该方法可以构造出给定值、形状和数据类型的2维张量,它同样也可以被tf.tensor()方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:

values:该参数表示张量的值,可以是nested array of numbersflat arrayTypedArray
shape:该参数表示张量的形状,为可选参数;
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32int32boolcomplex64string

接下来,我们看几个简单的案例,请看代码:

// Pass a nested array.
tf.tensor2d([[1, 2], [3, 4]]).print();

请看结果:

Tensor
    [[1, 2],
     [3, 4]]
// Pass a flat array and specify a shape.
tf.tensor2d([1, 2, 3, 4], [2, 2]).print();

请看效果:

Tensor
    [[1, 2],
     [3, 4]]
  1. tf.tensor3d(values,shape?,dtype?)
    该方法可以构造出给定值、形状和数据类型的3维张量,它同样也可以被tf.tensor()方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:

values:该参数表示张量的值,可以是 nested array of numbersflat arrayTypedArray
shape:该参数表示张量的形状,为可选参数;
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32int32boolcomplex64string

接下来,我们看几个简单的案例,请看代码:

// Pass a nested array.
tf.tensor3d([[[1], [2]], [[3], [4]]]).print();

请看结果:

Tensor
    [[[1],
      [2]],

     [[3],
      [4]]]
// Pass a flat array and specify a shape.
tf.tensor3d([1, 2, 3, 4], [2, 2, 1]).print();

请看结果:

Tensor
    [[[1],
      [2]],

     [[3],
      [4]]]

2. 切割数据

在第一部分中,我们了解了如何去创建一个张量数据,在本小节中,我们就来介绍一下如何对原张量进行切割,从而取出我们需要的数据,请看方法介绍:
tf.slice(x,begin,size?)

x:被切割的原始张量;
begin:开始切割的位置;
size:切割的大小;

接下来,我们看几个简单的案例,请看代码:

const x = tf.tensor1d([1, 2, 3, 4]);
x.slice([1], [2]).print();

请看结果:

Tensor
    [2, 3]

对于一维张量数据[1,2,3,4],根据slice方法指定的参数我们可以知道,第一个参数[1]表示切割的初始位置,即从原始张量的第二项(对应数值为2,下标索引为1)开始切割;第二个参数[2]表示切割元素的大小,即从原始张量的第二项开始切割,切割大小为2,即所得切割后的张量为[2,3]

接下来,我们再来切割一个二维数据,请看代码:

const x = tf.tensor2d([1, 2, 3, 4], [2, 2]);
x.slice([1, 0], [1, 2]).print();

上述代码中,我们创建了一个shape=(2,2)的张量,根据slice()方法指定的参数我们可以知道,begin对应的参数是[1,0]size对应的参数是[1,2],我们在参数解释中对begin参数做了解释,其表示切割的初始位置,故[1,0]表示在2个维度中,每个维度从哪里算起,即第一个维度从第一个元素算起(对应元素为[3,4]),第二个维度从第0个元素开始算起(对应元素为3),参数size表示每个维度的大小,也就是在每个维度取几个元素,对于上述案例,即在第一维度取一个元素,即所取元素为[3,4];第二维度取两个元素,即将[3,4]两个值均切割出来。

3. 其他开源作品

  • 微信公众号hahaCoder
  • 微信小程序hahaAI
  • 个人网站hahaWebsite.
  • Google扩展程序 hahaOCR

4. 文章最后

以上就是本文的所有内容,你学会了嘛?如果大家有什么问题,可以在我的公众号后台留言或直接加我微信沟通TURBODONG1002

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hahaCoderX

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值