目录
一些说明:
机器学习中,分类问题中的某个类别叫作类(class),数据点叫作样本(sample),某个样本对应的类叫作标签(label)。
在该学习过程中用到MINIST数据集。具体请参考https://www.jianshu.com/p/d282bce1a999
神经网络的数据表示
深度学习和机器学习中多用多维Numpy数组来存储数据,即张量(tensor)。
张量是一种数据容器(因为常常存储数据,所以也可以叫作 数值容器)。
标量(0D张量)
仅包含一个数字
维数为0
//导入numpy源
import numpy as np
>>x = np.array(12)
>>x
向量(1D张量)
包含一组数字,相当于一个行向量
>>x = np.array([12, 3, 4, 16])
>>x
矩阵(2D张量)
矩阵的行为张量的第一个轴,列为第二个轴。
>>x = np.array([[5, 3, 26, 0],
[6, 8, 12, 7],
[45, 7, 2, 1]])
>>x
3D张量以及更高维张量
将多个矩阵组成一个新的数组,即可得到3D张量,以此类推得到更高维的张量。
ps:深度学习通常处理的是0D到4D的张量,处理视频会用到5D。
下图帮助理解3D张量
>>x = np.array([[[1, 2, 3, 4],
[5, 6, 7, 8]],
[[7, 8, 9, 0],
[12, 3, 6, 8]]])
>>x
下图帮助理解4D张量
关键属性
轴的个数(阶数):即张量的维数(Numpy库中叫ndim)
形状:是一个整数元组,表示张量每一个轴的元素个数(Numpy库中叫shape)
数据类型:张量中所包含数据的类型,如uint8(Numpy库中为dtype)·
在Numpy中操作张量
简单介绍一下张量切片
ex:选择train_images[*]中的第10—100个数字(不含第100个)装在形状为(90, 28, 28)形状的数组中。
>>>my_slice = train_images[10:100]
>>>print(my_slice.shape)
(90, 28, 28)
等效的算法还有
>>>my_slice = train_images[10:100, :, :]
以及
>>>my_slice = train_image[10:100, 0:28, 0:28]
一般而言,可以沿着张量的每个轴在任意两个索引之间选择
接上面28×28的例子
在所有图像的右下角选出14×14的像素区域
my_slice = train_images[:, 14:, 14:,]
数据批量的概念
深度学习通常将数据拆分成小批量来处理。
所有张量数据的第一个轴叫作批量轴(0轴),均为样本轴。
具体看minist的一个批量
batch = train_images[:128]
//批量大小为128
//下一个批量
batch = train_images[128:256]
//第n个批量 注:索引从0开始
batch = train_images[128*n:128*(n+1)]
现实世界中的数据张量
向量(2D):(samples,features)
时间序列数据或序列数据(3D):(samples, timesteps,features)
图像(4D):(samples,height,width,channels)或(samples,channels,height,width) 后文解释
视频(5D):(samples,frames,height,width,channels)或(samples,frames,channels,height,width)
向量数据
第一个轴样本轴
第二个轴特征轴
通常数据集的样本数即为第一个轴的量,每个样本所包含的值的个数就是特征轴的量。
时间序列数据和序列数据
时间轴始终是第二个轴
图像数据
3 dimensions:高度、宽度、颜色深度
下图为图像张量组成的4D张量
视频数据
帧:3D
一系列帧:4D
批量视频组:5D