大家好,我是石璞东。
该方法经常用在对数据的预处理过程中,但是关于slice()
方法切割的具体思路,官网的教程实在令人费解,所以在本文中我将对slice()
方法做下总结,请看本文。
参考资料
- TensorFlow.js文档:https://js.tensorflow.org/api/latest/
1. 构造数据
在本小节中我将介绍6种创建不同维度张量的方法,请看示例:
- tf.tensor(values,shape?,dtype?)
该方法可以构造出一个给定值、形状和数据类型的张量,请看参数介绍:
values
:该参数表示张量的值,可以是nested array of numbers
、flat array
或TypedArray
;
shape
:该参数表示张量的形状,为可选参数;
dtype:该参数表示张量的数据类型,为可选参数,其值可以为float32
、int32
、bool
、complex64
、string
;
接下来,我们看几个简单的案例,请看代码:
- 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]]
- tf.scalar(value,dtype?)
该方法可以构造出给定值和数据类型的0维张量,即一个标量,请看参数介绍:
value
:该参数表示标量的值,其值可以是number
、boolean
、string
、Unit8Array
;
dtype
:该参数表示张量的数据类型,为可选参数,其值可以为float32
、int32
、bool
、complex64
、string
;
接下来,我们看一个简单的案例,请看代码:
tf.scalar(3.14).print();
请看结果:
Tensor
3.140000104904175
- tf.tensor1d(values,dtype?)
该方法可以构造出给定值、形状和数据类型的1维张量,它同样也可以被tf.tensor()
方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:
values
:该参数表示张量的值,其值可以是numbers
或TypedArray
;
dtype
:该参数表示张量的数据类型,为可选参数,其值可以为float32
、int32
、bool
、complex64
、string
;
接下来,我们看一个简单的案例,请看代码:
tf.tensor1d([1, 2, 3]).print();
请看结果:
Tensor
[1, 2, 3]
- tf.tensor2d(values,shape?,dtype?)
该方法可以构造出给定值、形状和数据类型的2维张量,它同样也可以被tf.tensor()
方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:
values
:该参数表示张量的值,可以是nested array of numbers
、flat array
或TypedArray
;
shape
:该参数表示张量的形状,为可选参数;
dtype
:该参数表示张量的数据类型,为可选参数,其值可以为float32
、int32
、bool
、complex64
、string
;
接下来,我们看几个简单的案例,请看代码:
// 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]]
- tf.tensor3d(values,shape?,dtype?)
该方法可以构造出给定值、形状和数据类型的3维张量,它同样也可以被tf.tensor()
方法实现,但是为了保证程序的可读性,更推荐此写法,请看参数介绍:
values
:该参数表示张量的值,可以是nested array of numbers
、flat array
或TypedArray
;
shape
:该参数表示张量的形状,为可选参数;
dtype
:该参数表示张量的数据类型,为可选参数,其值可以为float32
、int32
、bool
、complex64
、string
;
接下来,我们看几个简单的案例,请看代码:
// 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
~