1.Scalars(标量)=====>0D tensors

image.png
image.png

2.trick:在线help命令

image.png

3.Vectors(向量)=====>1D tensors

  1. x = np.array([12,3,6,14])
  2. x

image.png

注意:不要将4维向量和4维张量搞混!!

4.如何快速得出变量是几维的张量?

法一:看np.array()的小括号中有几个完整的中括号
法二:调用.shape命令【注:(4,)表示一维的!】

5.Matrices(矩阵)=====>2D tensors

x = np.array([[5,78,2,34,0],
             [6,79,3,35,1],
             [7,80,4,36,2]])

6.三维或者更高维的张量怎么理解?

可以看成是k个低一维的张量进行拼接(高维张量的第一个数字就是k的值)

7.三维张量的例子

x = np.array([[[5,1,1,1,1],
             [6,3,2,1,4],
             [7,80,4,36,2]],
             [[5,78,2,34,0],
              [6,79,3,35,1],
              [7,80,4,36,2]],
              [[5,78,2,34,0],
               [6,79,3,35,1],
               [7,80,4,36,2]]])

image.png image.png
(3,3,5)——>3个(3,5)的二维张量

8.借助np.random.randint()构造4维张量

x = np.random.randint(30,size=(3,2,2,4))
  • 第一个30表示:要产生0~29之间的随机数【30取不到】
  • 第二个参数size(3,2,24)表示:要产生这样形状的4维张量
  • 表示要构造3个(2,2,4)的三维张量,每一个(2,2,4)都由2个(2,4)的张量组成

image.png

9.张量的三个属性及对应命令【张量的第一维的数值就是个数】

  • 维度【.ndim】
  • 形状【.shape】
  • 组成元素的类型【.dtype】

    train_images.ndim
    train_images.shape
    print(train_images.dtype)#uint8--->8个bit表示的整数
    

    10.可视化mnist数据以及plt.cm内置色彩映射函数的用法

    digit = train_images[4]
    plt.imshow(digit,cmap = plt.cm.binary)#黑白
    plt.show()
    
  • train_images[4]取出的就是第5张图片,每一个图片就是一个(28,28)的二维张量

  • **plt.cm.__用于进行色彩渲染,binary是黑白的**_

image.pngimage.pngimage.png

  • matplotlib.cm.色彩:对【数据集】使用【色彩】进行渲染展示

    11.切片操作:从目标张量中取出需要的数据

    image.png
    注:索引标注在格子划分的正上方,对应的数据在其右下方。
    train_image[4:9]:总共5个数据【索引分别维4、5、6、7、8的python也是从0开始的】
    理解方式一:起点的4右下方,终点的9左下方。**【并且9左下方的数据也是要的】
    _
    理解方式二:起点的4表示第一个要的数据的索引,终点的9表示第一个不要的数据的索引。
    trick负数索引的使用:负数索引所代表的数据在其右上方_
    trainimage[4:9]=train_image4:-3**
    Note:如果想要使得train_image数据的后20%作为验证集,也就是最后的12000张图片。
    可以使用train_image[:,-12000],:就表示从头开始选取数据,从0开始,并且最后的12000张数据是不需要的。_

    12.按照条件进行索引

    ①mnist数据集挑选第11张图片到第100张图片
    方式一:

    #在一堆张量中截取需要的数据
    #编号10到编号99
    #第11张图片取到第100张图片
    my_slice = train_images[10:100]
    my_slice.shape
    

    方式二:

    my_slice = train_images[10:100,:,:]
    my_slice.shape
    

    方式三:

    my_slice = train_images[10:100,0:28,0:28]
    my_slice.shape
    

    结果都是:(90,28,28)
    ②挑选数据集每一张图片的右下角1/4部分

    my_slice = train_images[:,14:,14:]
    

    image.png 从第15列开始,即从索引14到最后
    ③挑选数据集每一张图片的正中间1/4部分
    方式一:

    my_slice = train_images[:,7:21,7:21]
    

    方式二:【借助负数索引】

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

    image.png上7列,中14列,下7列
    note:从第8列开始取14列即第21列,对应的索引是20.所以切片为【7:21】.
    考虑负数索引更简单:最后7列都不要,所以对应的索引是【7:-7】

    13.深度学习与统计学习最大的区别

    深度学习可以对数据进行分批导入分批处理,但是一般的统计学习是一次性处理全部的数据。所以,一般来说深度学习不会让模型卡掉,顶多是训练时间长一点。
    实际处理中可能的分批操作:

    batch = train_images[:128]
    batch = train_images[128:256]
    batch = train_images[128*n,128*(n+1)]
    

    14.现实数据的张量维度举例

    实例1:**若干个数据,每个数据由若干个特征组成======(Vector向量2D tensor)
    比如10000个人,每个人都有3个特征,则用(10000,3)表示。
    image.png**

  • 在文本分析领域,现在由500篇文章,想要去看这500篇文章出现2000个目标单词的情况,数据就用(500,2000)这一2d tensors表示。

  • 2d tensors时,第一个维度的取值就是样本个数,第二个取值是特征的数目。

实例2:时间序列式的数据或者其他的序列式数据(samples,timestep,feature)

  • 股价分析:每天记录390分钟的数据,每一分钟一次股市的数据变动,每次记录股市的最大值、最小值以及收盘值共三个特征。每年记录250天。**(250,390,3)**

实例3:图片====(4d tensors)(samples,height,width,channel)**【顺序不一定,和使用的框架有关系】**

  • 每一张彩色图片都是:(28,28,3).3个通道分别是RGB,相当于3个(28,28)的图片进行叠加。如果是黑白的,那么就是(28,28,1).

实例4:video**=====(5d tensors)(samples,frame,height,width,channel)**

  • frame:视频的帧数,也就是一个视频由多少张图片组成的。
  • 比如有一个60s的视频,每1s取4帧,总共有4个这样的视频,视频的分辨率是144*256.则这样的张量为:(4,240,144,256,3)

**