张量是deepx的核心数据结构, 有以下几种张量.
| 类名 | 张量类型 | 简称 | 描述 | 用途 |
|---|---|---|---|---|
| Tensor<float_t> | TENSOR_TYPE_TSR | TSR | 浮点型稠密张量 | 参数, 样本, 隐层, 梯度 |
| Tensor<int_t> | TENSOR_TYPE_TSRI | TSRI | 整型稠密张量 | 样本 |
| Tensor<std::string> | TENSOR_TYPE_TSRS | TSRS | 字符串型稠密张量 | 样本 |
| SparseRowMatrix<int_t, float_t> | TENSOR_TYPE_SRM | SRM | 稀疏行矩阵 | 参数, 梯度 |
| CSRMatrix<int_t, float_t> | TENSOR_TYPE_CSR | CSR | 压缩稀疏行矩阵 | 样本 |
其中, float_t是单精度浮点数, int_t是64位无符号整数.
Tensor, 稠密张量.
Tensor最高支持8阶稠密张量.
根据数据类型不同, 浮点型稠密张量简称TSR, 整型稠密张量简称TSRI, 字符串型稠密张量简称TSRS.
它的头文件是"tensor.h".
SparseRowMatrix, 稀疏行矩阵, 简称SRM.
SRM由哈希结构组成. SRM的键是行id, 它的范围是int_t的范围. SRM的值是行id对应的行.
全0行可以不存储, 节省空间.
SRM支持随机访问, 通过行id查找行非常高效.
下面的TSR可以这样用SRM表示.
| TSR行/列 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 2 | -1 | -2 |
| 2 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 0 |
| 4 | 0 | 0 | 0 | 0 |
| 5 | 1 | 1 | 2 | 2 |
| ... | 0 | 0 | 0 | 0 |
| 10000000 | -1 | 0 | 1 | 2 |
| ... | 0 | 0 | 0 | 0 |
| 20000000 | 1 | 0 | 2 | 0 |
| ... | 0 | 0 | 0 | 0 |
| SRM行id | SRM行 |
|---|---|
| 1 | [1, 2, -1, -2] |
| 5 | [1, 1, 2, 2] |
| 10000000 | [-1, 0, 1, 2] |
| 20000000 | [1, 0, 2, 0] |
它的头文件是"sparse_row_matrix.h".
CSRMatrix(Compressed Sparse Row Matrix), 压缩稀疏行矩阵, 简称CSR.
CSR由1个整数和3个数组组成, 存储紧凑, 节省空间.
CSR支持遍历, 不支持随机访问.
下面的TSR可以这样用CSR表示.
| TSR行/列 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 | 2 | 0 | 3 | 0 | 0 | 0 |
| 1 | 0 | 1 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 0 | 1 | 0 | 2 | 3 | 0 | 4 | 5 |
| CSR属性 | 类型 | 值 |
|---|---|---|
| row | 整数 | 3 |
| row_offset | 数组 | [0, 3, 5, 10] |
| col | 数组 | [2, 4, 6, 1, 2, 3, 5, 6, 8, 9] |
| value | 数组 | [1, 2, 3, 1, 2, 1, 2, 3, 4, 5] |
它的头文件是"csr_matrix.h".