matlabk大于等于0如何表示_「马上学tensorflow 2.0」 神经网络中数据如何表示

大家好,今天我们学习【马上学tensorflow 2.0】之 神经网络中数据如何表示。

我们 马上学三点

  1. 什么是张量,几种类型和属性
  2. 常见张量举例:向量,序列,图像,视频
  3. 张量操作,切片和批量

大家可以点击下面的“ 了解更多 ”,或搜索“ 马上学123 ”,在线观看PPT讲义。

什么是张量?

上一节例子使用的数据存储在多维 Numpy 数组中, 也叫张量(tensor)。 一般来说, 当前所有机器学习系统都使用张量作为基本数据结构。 张量对这个领域非常重要, 重要到 Google 的TensorFlow 都以它来命名。

那么什么是张量? 张量是一个数字容器, 包含数值数据

我们熟悉的矩阵,它是二维张量。 张量是矩阵向任意维度(dimension)的推广, 我们接下来介绍几种常用的张量。

标量(0D 张量)

只包含一个数字的张量叫作标量, 在 Numpy中, 一个float64的数字就是一个标量张量, 它有 0 个维度。

>>> import numpy as np>>> x = np.array(12)>>> xarray(12)>>> x.ndim0

向量(1D 张量)

数字组成的数组叫作向量(vector) 或一维张量(1D 张量)。

下面是一个 Numpy 向量:

>>> x = np.array([12, 3, 6, 14, 7])>>> xarray([12, 3, 6, 14, 7])>>> x.ndim1

矩阵(2D 张量)

向量组成的数组叫作矩阵(matrix) 或二维张量(2D 张量), 可理解为数字组成的矩形网格。

张量的维度(dimension)通常叫作轴, 矩阵有 2 个轴(通常叫作行和列)。

下面是一个 Numpy 矩阵:

>>> x = np.array([ [5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]])>>> x.ndim2

第一个轴上的元素叫作行(row), 第二个轴上的元素叫作列(column)。

3D 张量与更高维张量

多个矩阵组合成一个新的数组, 可以得到一个** 3D 张量**, 可理解为数字组成的立方体

下面是一个 Numpy 的 3D 张量:

>>> x = np.array([[[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]], [[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]], [[5, 78, 2, 34, 0], [6, 79, 3, 35, 1], [7, 80, 4, 36, 2]]])>>> x.ndim 3

将多个 3D 张量组合成一个数组, 可以创建一个 4D 张量, 以此类推。

常用的数据张量举例: 向量数据

我们需要处理的数据主要是下面几种:

  • 向量数据:2D张量,形状为 (samples, features)。 其中第一个轴是样本轴,第二个轴是特征轴。

例如: 人口统计数据集, 其中包括每个人的年龄、邮编和收入。 每个人可以表示为包含 3 个值的向量, 而整个数据集包含 100 000 个人, 因此可以存储在形状为 (100000, 3) 的 2D张量中。

常用的数据张量举例: 序列数据

  • 时间序列数据或序列数据:3D 张量,形状为 (samples, timesteps, features)。根据惯例,时间轴始终是第 2 个轴。
7f9d9328581c2f6eef7857cc7a67c61c.png

时间序列数据

例如: 股票价格数据集, 每一分钟,我们将股票的当前价格、 前一分钟的最高价格和 前一分钟的最低价格保存下来。 因此每分钟被编码为一个 3D 向量, 整个交易日被编码为一个形状为 (390, 3) 的 2D 张量 (一个交易日有 390 分钟), 而 250 天的数据则可以保存在 一个形状为 (250, 390, 3) 的 3D 张量中。 这里每个样本是一天的股票数据

常用的数据张量举例: 图像

  • 图像:4D 张量,形状为 (samples, height, width, channels)。
c73dd411ff54b04fd44128837a9f40f4.png

图像通常具有三个维度:高度、宽度和颜色深度

图像通常具有三个维度:高度、宽度和颜色深度, 如果图像大小为 256×256, 128 张彩色图像组成的批量 可以保存在一个形状为 (128, 256, 256, 3) 的张量中。 灰度图像的彩色通道只有一维,形状为 (128, 256, 256, 1)。

常用的数据张量举例: 视频

  • 视频:5D 张量,形状为 (samples, frames, height, width, channels)。

视频数据是现实生活中 需要用到 5D 张量的少数数据类型之一。

视频可以看作一系列帧, 每一帧都是一张彩色图像。 一系列帧可以保存在一个形状为 (frames, height, width, color_depth) 的 4D 张量中, 而不同视频组成的批量则可以保存在一个 5D 张量中, 其形状为(samples, frames, height, width, color_depth)。

例如, 一个以每秒 4 帧采样的 60 秒视频片段, 这个视频共有 240 帧, 视频尺寸为 144×256, 4 个这样的视频组成的批量将保存在 形状为 (4, 240, 144, 256, 3)的张量中。

张量属性

张量是由以下三个关键属性来定义的:

  • 轴的个数(阶): 例如,3D张量有3个轴,矩阵有2个轴, Python 库中也叫ndim。
  • 形状: 这是一个整数元组, 表示张量沿每个轴的维度大小(元素个数)。 例如,矩阵形状为 (3, 5),3D张量为 (3, 3, 5), 向量为 (5,),而标量的形状为空,即 ()。
  • 数据类型: 在 Python 库中通常叫作dtype, 例如,张量的类型可以是 float32、uint8、float64 等。

代码演示:

import tensorflow as tfmnist = tf.keras.datasets.mnist(train_images , train_labels), (test_images, test_labels) = mnist.load_data()# 张量 train_images 的轴的个数3,即 ndim 属性print(train_images.ndim)# 形状 (60000, 28, 28)print(train_images.shape)# 数据类型 uint8,即 dtype 属性。print(train_images.dtype)

张量切片

在前面的例子中, 我们使用语法 train_images[i] 来选择沿着第一个轴的特定数字。

选择张量的特定元素叫作张量切片, 我们来看一下 Numpy 数组上的张量切片运算。

下面这个例子选择 第 10~100 个数字(不包括第 100 个), 并将其放在形状为 (90, 28, 28) 的数组中。

>>> my_slice = train_images[10:100]>>> print(my_slice.shape)(90, 28, 28)

它等同于下面这个更复杂的写法:

my_slice1 = train_images[10:100, :, :] my_slice2 = train_images[10:100, 0:28, 0:28] 

给出了切片沿着每个张量轴的起始索引和结束索引。

数据批量的概念

通常来说, 深度学习中数据张量第一个轴都是样本轴。 在 MNIST 的例子中,样本就是数字图像, 此外,深度学习模型不会同时处理整个数据集, 而是将数据拆分成小批量

下面我们用张量切片拆分第一个128的批量大小:

batch = train_images[:128]

总结:

  • 张量是一个数字容器,包含数值数据。
  • 常见张量举例:2D向量,3D序列,4D图像,5D视频
  • 选择张量的特定元素叫作张量切片
  • 深度学习模型不会同时处理整个数据集, 而是将数据拆分成小批量。

这里讲了三点,关键词有哪几个?

问题:维度和轴有什么区别呢?

欢迎回复评论!

马上学,很简单!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值