1 个不稳定版本

使用旧的 Rust 2015

0.1.1 2018 年 12 月 16 日
0.1.0 2018 年 12 月 16 日

#1491算法

自定义许可证

18KB
383

deep-core

开放问题

运行示例

查看 ~/examples 目录中(文件名)存在的 {some-example} 并运行
cargorun --example {some-example}

下一个计划 - TODO:移动到路线图

按预期实现顺序

  • 图遍历和访问模式

    • 无需深入研究图论,只需迭代节点等即可 - 不要过度
  • 前向计算引擎

    • 张量算术
    • 设计
    • 在简单的图(dot -> add -> leaky)上使用 CPU 后端实现第一个草案
  • 后向计算引擎

    • 如何计算梯度(每个操作,每个后端等)?
    • 设计
      • 类似于前向,但请注意,此引擎可以更改参数节点
    • 在正向计算引擎可以解决的 上使用 CPU 后端实现第一个草案
  • 使用正向和后向引擎都可以解决的图进行简单训练

    • 前向传播
    • 反向传播
    • 2 种不同的梯度下降优化器
      • 实际上哪个不重要,但至少实现两种,以强制我们解耦实现
      • sgd 和批处理可能?
  • LeNet 实现

    • 操作符实现(卷积池等所需操作)
    • 训练
    • 检查我们在 mnist 数据集上得到的结果是否合理

希望得到

  • 单元测试
  • 文档
  • 图序列化
    • 字符串到/从
    • 二进制到/从

示例图

以下序列化由默认的 Debug Rust 格式化程序生成,格式在此不是很重要,并且可能会在未来更改。这里重要的是哪个,以及哪些数据。

Graph {
    id: 0,
    nodes: [
        InputNode {
            id: 0,
            tensor_descriptor: TensorDescriptor {
                tensor_id: 0,
                shape: Some(
                    Shape {
                        dimensions: [
                            3
                        ]
                    }
                )
            }
        },
        ParameterNode {
            id: 1,
            tensor_descriptor: TensorDescriptor {
                tensor_id: 1,
                shape: Some(
                    Shape {
                        dimensions: [
                            3,
                            3
                        ]
                    }
                )
            }
        },
        ParameterNode {
            id: 2,
            tensor_descriptor: TensorDescriptor {
                tensor_id: 2,
                shape: Some(
                    Shape {
                        dimensions: [
                            3
                        ]
                    }
                )
            }
        },
        OperationNode {
            id: 1,
            operation: Dot
        },
        OperationNode {
            id: 2,
            operation: Add
        },
        OperationNode {
            id: 3,
            operation: LeakyRelu(
                0.57
            )
        }
    ],
    edges: [
        OperandEdge {
            id: 0,
            connection: (
                0,
                1
            ),
            operand: 0
        },
        OperandEdge {
            id: 1,
            connection: (
                1,
                1
            ),
            operand: 1
        },
        OperandEdge {
            id: 2,
            connection: (
                1,
                2
            ),
            operand: 0
        },
        OperandEdge {
            id: 3,
            connection: (
                2,
                2
            ),
            operand: 0
        },
        OperandEdge {
            id: 4,
            connection: (
                2,
                3
            ),
            operand: 0
        }
    ]
}

无运行时依赖项