Git Product home page Git Product logo

matrixslow's Introduction

MatrixSlow - 用Python实现深度学习框架

English Version

avatar

简介

1984 年,《现代操作系统》(俗称马戏团书)的作者塔嫩鲍姆教授(Andrew S. Tanenbaum)开发了一个教学用的操作系统Minix。受其启发(多大程度未知),Linus Torvalds 创造了Linux系统。这里我们决定效仿前辈,用Python语言从零开始实现一个基于计算图的机器学习/深度学习框架,我们称其MatrixSlow。

实现MatrixSlow的初衷是为了团队内部分享学习。通过把机器学习的理论、原理和工程实践结合起来,在动手“建造”中加深对理论的“理解”。深度学习框架正是一个最好的例子。但是,以TensorFlow为代表的现代深度学习框架的源码对于学习而言已经过于复杂,因此,我们决定用纯Python实现一个简单的深度学习框架MatrixSlow(核心代码2K行左右,只依赖了Numpy)。这个框架基于计算图,支持自动求导和梯度下降优化算法(及变体)。我们用该框架搭建了一些经典模型,包括LR、FM、DNN、CNN、RNN、W&D、DeepFM等)。该框架还包括一些工程上的方案,包括训练器、分布式训练、模型部署和服务等。取MatrixSlow这个谦卑的名字是为了表明它只是一个用于教学的框架,只支持二阶张量(Matrix,但表达力上无损失,详见本书第12章第1节),未考虑计算优化,因此运行起来有些slow。

除了把MatrixSlow的代码开源之外,我们还把设计MatrixSlow时的一些思考和实现细节汇集成书《用Python实现深度学习框架》,由人民邮电出版社(图灵原创)正式出版上架,各大电商平台已可以购买:

我们在代码中写了尽量详细的注释,为即便不买书的同学,通过阅读源码亦能理解这个“麻雀虽小五脏俱全”的框架,并从中学习和理解机器学习背后的原理。

著名物理学家,诺贝尔奖得主Richard Feynman办公室的黑板上写了:"What I cannot create, I do not understand.",即“我不能建造的,我便无法理解”,MatrixSlow和本书,算是我们对伟大科学先哲**的一次小小的践行。

特性

  • 基于计算图,可用于搭建大多数的机器学习模型。
  • 支持自动求导。
  • 支持随机梯度下降优化算法及其几个重要变种(如RMSProp、ADAGrad、ADAM等)。
  • 支持常见的模型评估算法。
  • 支持模型保存和加载。
  • 支持PS和Ring AllReduce分布式训练。
  • 支持模型serving 。

依赖

核心代码:

- python 3.7及以上
- numpy

分布式训练:

- protobuf
- grpc

示例代码:

- pandas

代码结构

.
├── README.md
├── benchmark
├── example
├── matrixslow
└── matrixslow_serving
  • matrixslow: 核心代码部分,包括计算图、自动求导和优化算法、模型保存加载、分布式训练。
  • matrixslow_serving: 通用的模型推理服务,类似tensorflow serving 。
  • example: 按照书中章节分目录的示例,比如ch05介绍了如何用matrixslow搭建和训练多层全连接神经网络,ch11演示了如何进行分布式训练。

matrixslow's People

Contributors

geoyee avatar janzenliu avatar xuanchenli avatar zc911 avatar zhangjuefei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

matrixslow's Issues

书中,有处公式存在错误

HI,
首先,非常喜欢您的书,之前看过许多关于深度学习方面的书籍,但是对于深度学习框架本身介绍的书籍却不多,而且,深度学习框架本身代码量比较大,更新快,所以直接看源码,很痛苦。

  • 我在微信读书,阅读您的书籍的时候发现,有数公式是否存在错误 。 公式4.2 是关于p1 的定义,下面关于p2 的定义,是否多出了一个负号。
    image

Variable类存在错误

Variable类在初始化时,父类Node的初始化不应该传入self参数,即

def __init__(self, dim, init=False, trainable=True, **kargs):
    """
    变量节点没有父节点,构造函数接受变量的形状,是否初始化以及是否参与训练的标识
    """
    Node.__init__(**kargs) #而非Node.__init__(self,  **kargs)
    self.dim = dim

这是因为如果传入self,则Node会将自身Variable实例收集到parent参数中,然后将自己加入到自己的children列表中,如果调用reset_value函数,就会陷入无限递归,从而报错

关于书中第一章(第7页)内容的疑问

你好,我最近正在看您出的书
因为我是初学者,对于某些问题的理解没有很深刻
在书的第七页,您提到为了减少模型对新样本的输出值,可以使用式1.3调整权值和偏置
这样做的依据是利用xi的符号进而控制权值wi的更新(增大 or 减小)
这里我有疑问如下:
xi(i=1,2,3)代表的是(身高,体重,体脂率),那xi为什么会有小于0的情况
式1.3是依据经验构造的吗?

matrixslow/core/core.py中的一处疑问

image
此处的
return [node for node in default_graph.nodes if isinstance(node, Variable) and node.trainable]
是否应该改为:
return [node for node in graph.nodes if isinstance(node, Variable) and node.trainable]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.