TensorFlow slice方法详解

简介: 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

相关文章
|
7月前
|
机器学习/深度学习 搜索推荐 算法
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
推荐系统离线评估方法和评估指标,以及在推荐服务器内部实现A/B测试和解决A/B测试资源紧张的方法。还介绍了如何在TensorFlow中进行模型离线评估实践。
439 0
|
机器学习/深度学习 存储 人工智能
Google Earth Engine(GEE)——TensorFlow支持深度学习等高级机器学习方法(非免费项目)
Google Earth Engine(GEE)——TensorFlow支持深度学习等高级机器学习方法(非免费项目)
1389 0
|
4月前
|
CDN 缓存 前端开发
JSF 性能优化:提升应用响应速度
【8月更文挑战第31天】JavaServer Faces (JSF) 是构建企业级 Web 应用的强大框架。但随着应用复杂度增加,性能问题可能显现。本文通过具体案例介绍如何优化 JSF 应用,提升响应速度。首先创建一个名为 “MyJSFOptimizationApp” 的新 JSF 项目,并在 `pom.xml` 中添加必要的依赖。接着,在 `WEB-INF` 目录下配置 `web.xml` 文件,设置 JSF servlet。然后创建一个 Managed Bean 包含简单属性和方法,并使用 Facelets 页面 `index.xhtml` 展示信息。
40 0
|
4月前
|
UED 开发工具 iOS开发
Uno Platform大揭秘:如何在你的跨平台应用中,巧妙融入第三方库与服务,一键解锁无限可能,让应用功能飙升,用户体验爆棚!
【8月更文挑战第31天】Uno Platform 让开发者能用同一代码库打造 Windows、iOS、Android、macOS 甚至 Web 的多彩应用。本文介绍如何在 Uno Platform 中集成第三方库和服务,如 Mapbox 或 Google Maps 的 .NET SDK,以增强应用功能并提升用户体验。通过 NuGet 安装所需库,并在 XAML 页面中添加相应控件,即可实现地图等功能。尽管 Uno 平台减少了平台差异,但仍需关注版本兼容性和性能问题,确保应用在多平台上表现一致。掌握正确方法,让跨平台应用更出色。
60 0
|
4月前
|
TensorFlow 算法框架/工具
【Tensorflow+Keras】用Tensorflow.keras的方法替代keras.layers.merge
在TensorFlow 2.0和Keras中替代旧版keras.layers.merge函数的方法,使用了新的层如add, multiply, concatenate, average, 和 dot来实现常见的层合并操作。
35 1
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
OpenCV读取tensorflow 2.X模型的方法:将SavedModel转为frozen graph
【2月更文挑战第22天】本文介绍基于Python的tensorflow库,将tensorflow与keras训练好的SavedModel格式神经网络模型转换为frozen graph格式,从而可以用OpenCV库在C++等其他语言中将其打开的方法~
153 1
OpenCV读取tensorflow 2.X模型的方法:将SavedModel转为frozen graph
|
7月前
|
并行计算 TensorFlow 算法框架/工具
Linux Ubuntu配置CPU与GPU版本tensorflow库的方法
Linux Ubuntu配置CPU与GPU版本tensorflow库的方法
160 1
|
7月前
|
机器学习/深度学习 数据可视化 TensorFlow
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
用TensorBoard可视化tensorflow神经网络模型结构与训练过程的方法
371 1
|
7月前
|
并行计算 TensorFlow 算法框架/工具
新版本GPU加速的tensorflow库的配置方法
新版本GPU加速的tensorflow库的配置方法
183 1
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法
Anaconda配置Python新版本tensorflow库(CPU、GPU通用)的方法
158 1