zoukankan      html  css  js  c++  java
  • 神经网络中的常用表示方式

    标量(OD 张量)

    数字组成的数组叫作向量(vector)或一维张量(1 D 张量)。一维张量只有一个轴。下面是一个 Numpy 向量。

    (tensorflowcv) turing@localhost ~ % python
    Python 3.7.5 (v3.7.5:5c02a39a0b, Oct 14 2019, 18:49:57) 
    [Clang 6.0 (clang-600.0.57)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import numpy as np
    >>> x = np.array(23)
    >>> x
    array(23)
    

    向量(1 D 张量)

    数字组成的数组叫做向量(vector)或一维(1D张量).一维张量只有一个轴.

    >>> y = np.array([12,24,36,48])
    >>> y
    array([12, 24, 36, 48])
    >>> y.ndim
    1
    

    这个向量有4个元素,所以被称作4D向量. 不要把4D向量和4D张量混淆i了.向量只有一个轴,但是表示了4个维度,而4D张量有4个轴.维度(dimensionality)可以表示沿着某个轴上的元素个数(比如 4 D 向量),也可以表示张量中轴的个数(比如 4 D 张量),这有时会令人感到混乱。对于后一种情况,技术上更准确的说法是 4 阶张量(张量的阶数即轴的个数),但 4 D 张量这种模糊的写法更常见。

    矩阵(2 D 张量)

    向量组成的数组叫做矩阵(matrix)或者二维张量(2D张量). 矩阵有2个轴.

    >>> z = np.array([[5,78,24,1],
    ...             [1,2,3,4],
    ...             [4,6,7,8]])
    >>> z
    array([[ 5, 78, 24,  1],
           [ 1,  2,  3,  4],
           [ 4,  6,  7,  8]])
    >>> z.ndim
    2
    

    3 D 张量与更高维张量关键属性

    将多个矩阵组合成一个新的矩阵就可以得到一个3D张量

    >>> q = np.random.randn(3,4,2)
    >>> q
    array([[[-0.01620116, -0.17436912],
            [ 0.4581523 , -1.52342501],
            [-0.8196764 , -1.56960572],
            [-0.14080388, -1.08867946]],
    
           [[ 0.22365678,  0.80081233],
            [ 0.44461579, -0.10655642],
            [ 1.04337676,  0.57167161],
            [-0.45150608,  0.2777626 ]],
    
           [[-0.39876745,  0.21239111],
            [-1.91937848, -0.56022366],
            [ 0.20022585,  1.96652715],
            [-1.4904011 ,  0.27641009]]])
    >>> q.ndim
    3
    

    以此类推,将多个3D张量组合成一个数组,将会变成4D张量.后面使用的Objection Detection里面都是4D的张量进行计算的.

    在 Numpy 中操作张量

    在MNIST例子中,使用语法 train_ Images ]来选择沿着第一个轴的特定数字。选择张量的特定元素叫作张量切片(tensor slicing)。我们来看一下 Numpy 数组上的张量切片运算。

    下面这个例子选择第 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_images  [10: 100, 0: 28, 0: 281
    

    你可以沿着每个张量轴在任意两个索引之间进行选择。例如,你可以在所有图像的右下角选出 14 像素 x14 像素的区域

    my_slice=train_images [: 14]

    也可以使用负数索引。与 Python 列表中的负数索引类似,它表示与当前轴终点的相对位置你可以在图像中心裁剪出 14 像素 x14 像素的区域:

    my slice=train images [: 7: -7, 7: -7 ]

    数据批量的概念

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

    此外,深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量。具体来看,下面是 MINST 数据集的一个批量,批量大小为 128。

    batch train images [: 128]

    然后是下一个批量。

    batch =train images [128: 256)

    然后是第 n 个批量。

    batch train _images [128*n: 128 * (n +1)]

    对于这种批量张量,第一个轴(0 轴)叫作批量轴(batch axis)或批量维度(batch dimension)。在使用 Keras 和其他深度学习库时,你会经常遇到这个术语。

    现实世界中的数据张量

    向量数据:2 D 张量,形状为(samp1 es, features)。

    时间序列数据或序列数据:3 D 张量,形状为(samples, timesteps, features 图像:4 D 张量,形状为(samples, height, width, channells)或(samples, Channels height, width

    视频:5 D 张量,形状为(samples, frames, height, width, channe1 s)或(samples frames, channels, height, width)

    向量数据

    二维向量和高数当中的概念一样,通过x,y来表示两者之间的关系

    时间序列数据或序列数据

    当时间(或序列顺序)对于数据很重要时,应该将数据存储在带有时间轴的 3 D 张量中。每个样本可以被编码为一个向量序列(即 2 D 张量),因此一个数据批量就被编码为一个 3 D 张量(见下图)。

    图像数据

    图像通常具有三个维度:高度、宽度和颜色深度。虽然灰度图像(比如 MINSTT 数字图像)只有一个颜色通道,因此可以保存在 2 D 张量中,但按照惯例,图像张量始终都是 3 D 张量,灰度图像的彩色通道只有一维。因此,如果图像大小为 256×256, 那么 128 张灰度图像组成的批量可以保存在一个形状为(128,256,256,1) 的张量中,而 128 张彩色图像组成的批量则可以保存在一个形状为(128,256,256,3) 的张量中(见下图)。

    图像张量的形状有两种约定:通道在后(channels-last)的约定(在 Tensorelow 中使用)和通道在前(channels-first)的约定(在 Theano 中使用)。Google 的 Tensorelow 机器学习框架将颜色深度轴放在最后:(samples, height, width, co1 or_ depth)。与此相反,Thean 将图像深度轴放在批量轴之后:(samples, co1 or_ depth, height, width)。如果采用 Theano 约定,前面的两个例子将变成(128,1,256,256) 和(128,3,256,256)。Keras 框架同时支持这两种格式。

    视频数据

    视频数据是现实生活中需要用到 5 D 张量的少数数据类型之一。视频可以看作一系列帧,

    每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为(height, width, color depth)的 3 D 张量中,因此一系列帧可以保存在一个形状为(frames, height, width, color_ depth)的 4 D 张量中,而不同视频组成的批量则可以保存在一个 5 D 张量中,其形状为

    (samples, frames, height, width, color-depth

    举个例子,一个以每秒 4 帧采样的 60 秒 Youtube 视频片段,视频尺寸为 144×x256, 这个视频共有 240 帧。4 个这样的视频片段组成的批量将保存在形状为(4,240,144,256,3) 的张量中。总共有 106168320 个值!如果张量的数据类型(dtype)是 f1 oat32, 每个值都是 32 位,那么这个张量共有 405 MB。好大!你在现实生活中遇到的视频要小得多,因为它们不以 f1 oat32 格式存储,而且通常被大大压缩,比如 MPEG 格式。

  • 相关阅读:
    开发者看过来,哪个移动平台好赚钱?
    EGit下配置Github项目
    用户接口(UI)设计的 20 条原则
    要想工作效率高,我们到底需要多少睡眠?
    Android 读取<metadata>元素的数据
    Android实现推送方式解决方案
    余晟:做个懂产品的程序员
    Gson简要使用笔记
    编程从业五年的十四条经验,句句朴实
    程序员不是包身工
  • 原文地址:https://www.cnblogs.com/TuringEmmy/p/12520982.html
Copyright © 2011-2022 走看看