首先,推特有140个字的限制。其次,推特使用UTF-8编码标准,这种编码标准能表示百万种字符,但实际上我们只对前128个字符感兴趣,因为他们与ASCII码相同。所以,一篇推特文可以包装成一个2D向量: (140,128) 如果我们下载了一百万篇川普哥的推文(印象中他一周就能推这么多),我们就会用3D张量来存: (number_of_tweets_captured, tweet, character) 这意味着,我们的川普推文集合看起来会是这样: (1000000,140,128) 图片 4D张量很适合用来存诸如JPEG这样的图片文件。之前我们提到过,一张图片有三个参数:高度、宽度和颜色深度。一张图片是3D张量,一个图片集则是4D,第四维是样本大小。 著名的MNIST数据集是一个手写的数字序列,作为一个图像识别问题,曾在几十年间困扰许多数据科学家。现在,计算机能以99%或更高的准确率解决这个问题。即便如此,这个数据集仍可以当做一个优秀的校验基准,用来测试新的机器学习算法应用,或是用来自己做实验。 Keras 甚至能用以下语句帮助我们自动导入MNIST数据集: from keras.datasets import mnist 这个数据集被分成两个部分:训练集和测试集。数据集中的每张图片都有一个标签。这个标签写有正确的读数,例如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) My beautiful cat Dove (750 x 750 pixels) 这样,我可爱的Dove将被简化为一串冷冰冰的数字,就好像它变形或流动起来了。 然后,如果我们有一大堆不同类型的猫咪图片(虽然都没有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来存储会怎样),所以,减小你的样本吧朋友。 (责任编辑:本港台直播) |