首页人工智能Keras1、神经网络的数据表示

1、神经网络的数据表示

目前所有机器学习系统都使用张量(tensor)作为基本数据结构,张量是一个数据容器,其包含的通常是数值数据,因此属于一个数字容器。

我们熟悉的矩阵为2阶矩阵。张量就是矩阵向任意维度dimensionality(张量的维度通常称为轴axis)的推广。张量轴的个数也叫作阶(rank)。

张量主要有以下3个属性来定义:

  • 轴的个数:也称为张量的ndim;
  • 形状:为一个整数元祖,表示张量沿每个轴的维度大小,即元素个数。
  • 数据类型:张量所包含的数据的类型,例如,float16、float32、float64、unit8等。在tensorflow中还可能会遇到string类型的张量。

1.标量(0阶张量):

仅包含一个数字的张量叫做标量(scalar),也称作标量张量、0阶张量、0维张量。

在NumPy中,一个float32 类型或float64 类型的数字就是一个标量张量(或标量数组)。

可以用ndim属性来查看NumPy 张量的轴的个数。

>>> import numpy as np
>>> x = np.array(1)
>>> x
array(1)
>>> x.ndim
0
>>> x.shape
()

2.向量(1阶张量):

数字组成的数组叫做向量(vector),也称作1阶张量、1维张量。

# 该向量包含5个元素,也称为5为向量
>>> x = np.array([1, 2, 3, 4, 5])
>>> x
array([1, 2, 3, 4, 5])
>>> x.ndim
1
>>> x.shape
(5,)

3.矩阵(2阶张量):

向量组成的数组叫做矩阵(matrix),也称为2阶张量、2维张量。

# 第一个轴叫做行(row),第二个轴叫做列(column)
>>> x = np.array([[1, 2, 3, 4],
                  [5, 6, 7, 8],
                  [9, 10, 11, 12]])
>>> x.ndim
2
>>> x.shape
(3, 4)

4.3阶张量或更高阶张量:

多个矩阵(2阶张量)组成的数组为3阶张量,多个3阶张量组成的数组为4阶张量,以此类推,得到更高阶张量。

>>> x = np.array([[[ 1,  2,  3,  4],
                   [ 5,  6,  7,  8],
                   [ 9, 10, 11, 12]],

                  [[ 1,  2,  3,  4],
                   [ 5,  6,  7,  8],
                   [ 9, 10, 11, 12]],

                  [[ 1,  2,  3,  4],
                   [ 5,  6,  7,  8],
                   [ 9, 10, 11, 12]]])
>>> x.ndim
3
>>> x.shape
(3, 3, 4)

5.MNIST数据:

首先加载MNIST数据集。

# 下载的数据集保存位置 C:/Users/用户名/.keras、datasets,为npz 格式
# npz格式实际上是numpy提供的数组存储方式,简单的可看做是一系列npy数据的组合

from tensorflow.keras.datasets import mnist

(train_images , train_labels) , (test_images , test_labels) = mnist.load_data()

查看数据属性。

# 查看张量train_images 的轴的个数,即ndim 属性----→3维张量
train_images.ndim

# 查看张量形状----→(60000, 28, 28)
train_images.shape

# 查看张量数据类型----→dtype('uint8')
train_images.dtype

可以看出,train_images 是一个由8 位整数组成的3 阶张量。

使用Matplotlib 库来显示这个3 阶张量中的第1个数字。

import matplotlib.pyplot as plt

digit = train_images[0]
plt.imshow(digit,cmap=plt.cm.binary)# cmap参数将标量数据映射到色彩图,具体颜色见本文附录
plt.show()

运行代码,可以看到第一个数字为5。

6.现实世界中的数据张量实例:

深度学习中需要处理的数据主要包括以下几种:

  • 向量数据:形状为(samples, features)的 2 阶张量,每个样本都是一个数值(“特征”)向量。
  • 时间序列数据或序列数据:形状为 (samples, timesteps, features)的 3 阶张量,每个样本都是特征向量组成的序列(序列长度为timesteps)。
  • 图像数据:形状为 (samples, height, width, channels)的 4 阶张量,每个样本都是一个二维像素网格,每个像素则由一个“通道”(channel)向量表示。
  • 视频数据:形状为 (samples, frames, height, width, channels) 的 5 阶张量,每个样本都是由图像组成的序列(序列长度为frames)。

通常来说,深度学习中所有数据张量的第一个轴(也就是轴0,因为索引从0 开始)都是样本轴[samples axis,有时也叫样本维度(samples dimension)]。

附录:

plt.imshow()中 cmap参数所能映射的颜色表,名字后加_r表示颜色取反。

References:《Deep Learning with Python(Second Editon)》

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments