0维张量/标量 标量是一个数字
1维张量/向量 1维张量称为“向量”
2维张量 2维张量称为矩阵
3维张量 公用数据存储在张量 时间序列数据 股价 文本数据 彩色图片(RGB)

让我们先来看看tensor(张量)是什么?

张量=容器。它的核心是一个数据容器,多数情况下,它包含数字,有时候它也包含字符串,但这种情况比较少。因此把它想象成一个数字的水桶。

张量有多种形式,首先让我们来看最基本的形式,你会在深度学习中偶然遇到,它们在0维到5维之间。我们可以把张量的各种类型看作这样:

0维张量/标量 ,装在张量/容器水桶中的每个数字称为“标量”。标量是一个数字。你会问为什么不干脆叫它们一个数字呢?我不知道,也许数学家只是喜欢听起来酷?标量听起来确实比数字酷。实际上,你可以使用一个数字的张量,我们称为0维张量,也就是一个只有0维的张量。它仅仅只是带有一个数字的水桶。想象水桶里只有一滴水,那就是一个0维张量。

在Python中,张量通常存储在Nunpy数组,Numpy是在大部分的AI框架中,一个使用频率非常高的用于科学计算的数据包。

我们为什么想把数据转换为Numpy数组?

很简单。因为我们需要把所有的输入数据,如字符串文本,图像,股票价格,或者视频,转变为一个统一得标准,以便能够容易的处理。

这样我们把数据转变成数字的水桶,我们就能用TensorFlow处理。它仅仅是组织数据成为可用的格式。在网页程序中,你也许通过XML表示,所以你可以定义它们的特征并快速操作。同样,在深度学习中,我们使用张量水桶作为基本的乐高积木。

1维张量/向量 ,类似于1维张量:数组。

每个编程语言都有数组,它只是单列或者单行的一组数据块。在深度学习中称为1维张量。张量是根据一共具有多少坐标轴来定义。1维张量只有一个坐标轴。 1维张量称为“向量”。我们可以把向量视为一个单列或者单行的数字。

如果想在Numpy得出此结果,按照如下方法:我们可以通过NumPy’s ndim函数,查看张量具有多个坐标轴。我们可以尝试1维张量。

2维张量  你可能已经知道了另一种形式的张量,矩阵——2维张量称为矩阵,我们可以把它看作为一个带有行和列的数字网格。这个行和列表示两个坐标轴,一个矩阵是二维张量,意思是有两维,也就是有两个坐标轴的张量。

在Numpy中,我们可以如下表示:

x = np.array([[5,10,15,30,25], [20,30,65,70,90], [7,80,95,20,30]])

我们可以把人的特征存储在一个二维张量。有一个典型的例子是邮件列表。比如我们有10000人,我们有每个人的如下特性和特征:

First Name(名)
Last Name(姓)
Street Address(街道地址)
City(城市)
State(州/省)
Country(国家)
Zip(邮政编码)

这意味着我们有10000人的七个特征。张量具有“形状”,它的形状是一个水桶,即装着我们的数据也定义了张量的最大尺寸。我们可以把所有人的数据放进二维张量中,它是(10000,7)。你也许想说它有10000列,7行。不。张量能够被转换和操作,从而使列变为行或者行变为列

3维张量

这时张量真正开始变得有用,我们经常需要把一系列的二维张量存储在水桶中,这就形成了3维张量。

在NumPy中,我们可以表示如下:

x = np.array([[[5,10,15,30,25], [20,30,65,70,90],[7,80,95,20,30]][[3,0,5,0,45],[12,-2,6,7,90],[18,-9,95,120,30]][[17,13,25,30,15],[23,36,9,7,80],[1,-7,-5,22,3]]])

你已经猜到,一个三维张量有三个坐标轴,可以这样看到:x.ndim输出为:3

让我们再看一下上面的邮件列表,现在我们有10个邮件列表,我们将存储2维张量在另一个水桶里,创建一个3维张量,它的形状如下:
(number_of_mailing_lists,  number_of_people,  number_of_characteristics_per_person)   == 》(10,10000,7)  它是一个3维张量是一个数字构成的立方体。

我们可以继续堆叠立方体,创建一个越来越大的张量,来编辑不同类型的数据,也就是4维张量,5维张量等等,直到N维张量。N是数学家定义的未知数,它是一直持续到无穷集合里的附加单位。它可以是5,10或者无穷。

这里有一些存储在各种类型张量的公用数据集类型:

  • 3维=时间序列
  • 4维=图像
  • 5维=视频

几乎所有的这些张量的共同之处是样本量。样本量是集合中元素的数量,它可以是一些图像,一些视频,一些文件或者一些推特。通常,真实的数据至少是一个数据量。

因此,即使4维张量通常存储图像,那是因为样本量占据张量的第4个字段。

例如,一个图像可以用三个字段表示:(width, height, color_depth) = 3D
但是,在机器学习工作中,我们经常要处理不止一张图片或一篇文档——我们要处理一个集合。我们可能有10,000张郁金香的图片,这意味着,我们将用到4D张量,就像这样:(sample_size, width, height, color_depth) = 4D

我们来看看一些多维张量存储模型的例子:

时间序列数据,用3D张量来模拟时间序列会非常有效!

医学扫描——我们可以将脑电波(EEG)信号编码成3D张量,因为它可以由这三个参数来描述:(time, frequency, channel)
这种转化看起来就像这样:如果我们有多个病人的脑电波扫描图,那就形成了一个4D张量:(sample_size, time, frequency, channel)

Stock Prices

在交易中,股票每分钟有最高、最低和最终价格。如下图的蜡烛图所示:

纽交所开市时间从早上9:30到下午4:00,即6.5个小时,总共有6.5 x 60 = 390分钟。如此,我们可以将每分钟内最高、最低和最终的股价存入一个2D张量(390,3)。如果我们追踪一周(五天)的交易,我们将得到这么一个3D张量:

(week_of_data, minutes, high_low_price)即:(5,390,3)同理,如果我们观测10只不同的股票,观测一周,我们将得到一个4D张量(10,5,390,3)

假设我们在观测一个由25只股票组成的共同基金,其中的每只股票由我们的4D张量来表示。那么,这个共同基金可以有一个5D张量来表示:(25,10,5,390,3)

文本数据

我们也可以用3D张量来存储文本数据,我们来看看推特的例子。

首先,推特有140个字的限制。其次,推特使用UTF-8编码标准,这种编码标准能表示百万种字符,但实际上我们只对前128个字符感兴趣,因为他们与ASCII码相同。所以,一篇推特文可以包装成一个2D向量:

(140,128)如果我们下载了一百万篇川普哥的推文(印象中他一周就能推这么多),我们就会用3D张量来存:(number_of_tweets_captured, tweet, character)这意味着,我们的川普推文集合看起来会是这样:(1000000,140,128)

图片

4D张量很适合用来存诸如JPEG这样的图片文件。之前我们提到过,一张图片有三个参数:高度、宽度和颜色深度。一张图片是3D张量,一个图片集则是4D,第四维是样本大小。

Keras 甚至能用以下语句帮助我们自动导入MNIST数据集:from keras.datasets import mnist
 
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
这个数据集被分成两个部分:训练集和测试集(训练集是用来训练神经网络学习算法,测试集则用来校验这个学习算法)。数据集中的每张图片都有一个标签。这个标签写有正确的读数,例如3,7或是9,这些标签都是通过人工判断并填写的。

MNIST图片是黑白的,这意味着它们可以用2D张量来编码,但我们习惯于将所有的图片用3D张量来编码,多出来的第三个维度代表了图片的颜色深度。

MNIST数据集有60,000张图片,它们都是28 x 28像素,它们的颜色深度为1,即只有灰度。

TensorFlow这样存储图片数据:(sample_size, height, width, color_depth).于是我们可以认为,MNIST数据集的4D张量是这样的:(60000,28,28,1)

彩色图片

彩色图片有不同的颜色深度,这取决于它们的色彩(注:跟分辨率没有关系)编码。一张典型的JPG图片使用RGB编码,于是它的颜色深度为3,分别代表红、绿、蓝。

这是一张我美丽无边的猫咪(Dove)的照片,750 x750像素,这意味着我们能用一个3D张量来表示它:(750,750,3)

这样,我可爱的Dove将被简化为一串冷冰冰的数字,就好像它变形或流动起来了。然后,如果我们有一大堆不同类型的猫咪图片,也许是100,000张吧,不是DOVE它的,750 x750像素的。我们可以在Keras中用4D张量来这样定义:

(10000,750,750,3)

5D张量

5D张量可以用来存储视频数据。TensorFlow中,视频数据将如此编码:

(sample_size, frames, width, height, color_depth)

如果我们考察一段5分钟(300秒),1080pHD(1920 x 1080像素),每秒15帧(总共4500帧),颜色深度为3的视频,我们可以用4D张量来存储它:(4500,1920,1080,3)
当我们有多段视频的时候,张量中的第五个维度将被使用。如果我们有10段这样的视频,我们将得到一个5D张量:(10,4500,1920,1080,3)

实际上这个例子太疯狂了!这个张量的大是很荒谬的,超过1TB。我们姑且考虑下这个例子以便说明一个问题:在现实世界中,我们有时需要尽可能的缩小样本数据以方便的进行处理计算,除非你有无尽的时间。

这个5D张量中值的数量为:10 x 4500 x 1920 x 1080 x 3 = 279,936,000,000
在Keras中,我们可以用一个叫dype的数据类型来存储32bits或64bits的浮点数:我们5D张量中的每一个值都将用32 bit来存储,现在,我们以TB为单位来进行转换:279,936,000,000 x 32 = 8,957,952,000,000
这还只是保守估计,或许用32bit来储存根本就不够(谁来计算一下如果用64bit来存储会怎样),所以,减小你的样本吧。

事实上,我举出这最后一个疯狂的例子是有特殊目的的。我们刚学过数据预处理和数据压缩。你不能什么工作也不做就把大堆数据扔向你的AI模型。你必须清洗和缩减那些数据让后续工作更简洁更高效。降低分辨率,去掉不必要的数据(也就是去重处理),这大大缩减了帧数,等等这也是数据科学家的工作。如果你不能很好地对数据做这些预处理,那么你几乎做不了任何有意义的事。

原文链接:https://blog.csdn.net/qq_31821675/article/details/79188449

【tensorflow】张量tensor--数据容器(把它想象成一个数字的水桶)相关推荐

  1. Tensorflow:张量(Tensor)的创建及其基础操作

    Tensorflow版本:V2.8.0   Tensorflow中所有的运算操作都是基于张量进行的.Tensorflow中的张量Tensor是具有统一类型的多维数组.这篇博文主要介绍张量的创建及基础操 ...

  2. TensorFlow 输出tensor数据

    # Input icrf(tensor数据) # Output out(float数据) import tensorflow as tf import numpy as npsess = tf.Ses ...

  3. tensorflow 转张量类型为float_5个简单的步骤掌握Tensorflow的Tensor

    在这篇文章中,我们将深入研究Tensorflow Tensor的细节.我们将在以下五个简单步骤中介绍与Tensorflow的Tensor中相关的所有主题: 第一步:张量的定义→什么是张量? 第二步:创 ...

  4. 张量tensor——神经网络数据的表示

    一般来说,当前所有机器学习系统都使用张量作为基本数据结构. 张量的核心在于,它是一个数据容器.它包含的数据几乎总是数值数据,因此它是数字的容器.如矩阵,它是二维张量.张量是矩阵向任意维度的推广.[注意 ...

  5. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记--使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  6. Tensor数据相关的运算、函数讲解及与numpy区别

    Tensor tensorflow 中使用它来表示数据.可以看做多维数组或者list. 标量是张量,向量是张量,矩阵是张量,矩阵的矩阵是张量. 常用几种定义方法 1. variable变量,一般是可以 ...

  7. Tensorflow学习——导入数据

    导入数据 目录 1.基本机制 数据集结构 创建迭代器 消耗迭代器中的值 保存迭代器状态 2.读取输入数据 消耗NumPy数组 消耗TFRecord数据 消耗文本数据 3.使用Dataset.map() ...

  8. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  9. 什么是张量 (tensor)?

    在TensorFlow 官方文档中文版中学习cifar10时,对张量Tensor的概念一知半解,特别在理解代码如何批量读取图片,如何实现卷积的细节困扰了我好几天,在查询网上的资料后总结如下: 一.Te ...

最新文章

  1. 一文带你了解Spring核心接口Ordered的实现及应用
  2. UVA11419 我是SAM
  3. coreldraw 导入面料_Coreldraw文件导入Photoshop方法
  4. 6.3 优化-机器学习笔记-斯坦福吴恩达教授
  5. BZOJ 1968 [Ahoi2005]COMMON 约数研究
  6. 【STM32】STM32F4系统架构
  7. linux中dhcp如何配置两个子网,linux – 配置DHCP服务器以在同一VLAN上为多个子网提供服务...
  8. 幅度调制(AM调制、DSB(双边带)调制、SSB、VSB)
  9. 黑加仑妞 使用vue+flask做全栈开发的全过程(实现前后端分离)
  10. SpringBoot+Vue.js实现大文件分片上传、断点续传与极速秒传
  11. Spring Setting
  12. [tensorflow and keras] 自定义带权重的logloss
  13. mysql_提示 Lock wait timeout exceeded解决办法
  14. 在Linux下安装GmSSL
  15. PostgreSQL 删除表格
  16. 财智理财7破解思路与总结
  17. R语言非度量多维标尺排序NMDS及一般加性模型GAM映射教程
  18. python课程作业-贪吃蛇
  19. xshell中数字小键盘不能使用怎么办?
  20. 【易通慧谷】通过一个案例两张概念图解析供应链金融

热门文章

  1. 架构设计 | 分布式事务①概念简介和基础理论
  2. Linux,没你想象的那么安全!
  3. flash 基础语法
  4. 计算一段代码执行完毕用时问题
  5. 【转载】使用LR测试Oracle数据库的方法
  6. Hibernate Query数据查询
  7. UILabel常用属性
  8. 谷歌在外贸中的实战解析
  9. Scala in depth 6 Scala的类型系统 中
  10. Captaris Workflow开发系列课程介绍。