深度学习 从零开始 —— 神经网络数学基础(二),张量操作

张量

上一节使用的数据存储在多维的Numpy数组中,这就叫张量(tensor)
是所有机器学习的基本数据结构。
是一个数据容器,是一个数字的容器。
例如矩阵,是二维张量。
张量维度(dimension)通常叫做(axis)。

标量——0D张量

仅包含一个数字的张量,叫做标量(scalar)。
在Numpy中,一个float32或者float64的数字就是一个标量张量,或标量数组。

可以用ndim来查看Numpy张量的轴数。张量轴的个数也叫作(rank)。

import numpy as np

x = np.array(12)
print(x)
print(x.ndim)

在这里插入图片描述

向量——1D张量

数字组成的数组叫做向量(vector),或者叫一维张量。

x = np.array([1,2,3,4,5])
print(x)
print(x.ndim)

在这里插入图片描述

矩阵(2D张量)

向量组成的数组叫矩阵(matrix),或者叫二维张量。矩阵有两个轴(行和列)。

x = np.array([[1,2,3,4,5],
              [6,7,8,9,10],
              [11,12,13,14]])
print(x)
print(x.ndim)

在这里插入图片描述
上面第一个行是[1,2,3,4,5],第一列是[1,6,11]。

3D张量及更高维张量

多个2D张量组合一个数组就是一个3D张量,多个3D张量组合一个数组就是一个4D张量。以此类推。

张量关键属性

  • 轴的个数。3D张量有三个轴,矩阵两个轴。张量的ndim。
  • 形状。一个整数元组。表示张量延每个轴的维度大小(元素个数)。前面例子里面的矩阵的形状就是(3,5)。向量的形状只包含一个元素(5,)。标量的形状是空()。
  • 数据类型。通常为float32,uint8,float64。

用MNIST看一下:

from keras.datasets import mnist

(train_image,train_labels),(test_images,test_labels) = mnist.load_data()
print(train_image.ndim)
print(train_image.shape)
print(train_image.dtype)

在这里插入图片描述
可以看出train_image是由8位整数,组成的3D张量。或者说是由60000个矩阵组成的数组,每个矩阵28*28个整数组成。

可以用matplotlib库来显示3D张量中的第四个数字。

import matplotlib.pyplot as plt

plt.imshow(digit,cmap=plt.cm.binary)
plt.show()

在这里插入图片描述

张量切片

train_image[4]来选择沿着第一个轴的特定数字,选择张量的特定元素叫做张量切片

选择第10~100个数字(不包括100)

my_slice = train_image[10:100]
print(my_slice.shape)

在这里插入图片描述
沿着每个张量轴的起始到结束:

my_slice = train_image[10:100,:,:]

my_slice = train_image[10:100,0:28,0:28]

上面两个结果等同于 train_image[10:100]。:表示选择整个轴。

my_slice = train_image[:,14:,14:]

上面表示选出所有图的右下角选出14*14的区域。

my_slice = train_image[:,7:-7,7:-7]

上面表示图像中心剪出14*14的区域。

猜你喜欢

转载自blog.csdn.net/wwb1990/article/details/104733238