你真的懂TensorFlow吗?Tensor是神马?为什么还会Flow?

本文的ipynb 格式见CSDN下载

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

实际上,你可以使用一个数字的张量,我们称为0维张量,也就是一个只有0维的张量。
它仅仅只是带有一个数字的水桶。想象水桶里只有一滴水,那就是一个0维张量。

import numpy as np
x = np.array(5)
print(x)

1维张量/向量,1维张量称为“向量”

x = np.array([1,2,3,4])
print(x)
#通过NumPy’s ndim函数,查看张量具有多个坐标轴。
x.ndim

2维张量

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

3维张量

一个3维张量是一个数字构成的立方体


y = 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],
               [34,3436,4364,3434,566]],
               [[17,13,25,30,15],
               [23,36,9,7,80],
               [1,-7,-5,22,3]]])
print(y)
y.ndim

3维=时间序列

4维=图像

5维=视频

一个图像可以用三个字段表示:

(width, height, color_depth) = 3D
(sample_size, width, height, color_depth) = 4D

时间序列数据

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

医学扫描——我们可以将脑电波(EEG)信号编码成3D张量,因为它可以由这三个参数来描述:

(time, frequency, channel)

这种转化看起来就像这样:
如果我们有多个病人的脑电波扫描图,那就形成了一个4D张量:

 (sample_size, time, frequency, channel)

纽交所开市时间从早上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,第四维是样本大小。

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)

这个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,000bit = 1.119744T


参考文献


Learning AI if You Suck at Math — P4 — Tensors Illustrated (with Cats!)

你真的懂TensorFlow吗?Tensor是神马?为什么还会Flow?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值