新坑
决定新挖个坑叫做”Life of a thread”, 主要总结一些CPU和GPU多线程并行技术的基础, 目的是自己学习和练习总结,希望给未来的自己和看到文章的同学带来帮助。目前的计划主要包含两部分内容:
- CPU多线程: C++ 11 thread线程库 (主要参考 《C++ Concurrecy in Action》& C++11 标准
- GPU多线程: CUDA (software to hardware) (主要参考 CUDA programming guide & 《大规模并行处理器编程实战》《Professional CUDA C Programming》
Read More
2020年1月16日拿到了对我来说最重要的博士学位证,也终于在1月20号办理好了入职手续正式成为NVIDIA大家庭中的一员。
2019年对我来说是充实且压力极大的一年,实习,修改和发表文章,写毕业大论文,毕业答辩等等,在公司和学校之间来回奔波着。在拿到学位证的一瞬间,心里终于踏实了。感谢一路走来陪伴在我身边帮助我的可爱的人们。
看看自己已经将近两年没有更新博客了。虽然没有更新,但是这两年收获的很多。新的征程开始了,我的博客也将恢复更新了.
I’m back
Read More
前言
遗传算法中个体的编码方式有很多比如二进制编码,实数编码,格雷编码,符号编码等等。之前我写的遗传算法框架提供了两种固定的编码方式: 二进制编码和实数编码。但是这些编码方式都是写死在GAIndividual
类的encode
和decode
方法里的。为了使得gaft能够灵活的支持更多的编码方式,我对个体的定义进行了更新,目前可以通过实现接口自定义编码方式了。目前仍然内置二进制编码和实数编码方式,不过实现的方式已经与以前不同。
可以参考v0.5.0的CHANGELOG
正文
在这里我就介绍一下接口的更新和使用方法。
Read More
前言
上一篇介绍了损失函数对计算图中节点梯度计算的方法和实现以及反向传播算法的原理,但是并没有给出如何实现损失函数从后向前计算梯度。本文主要总结在可以计算每个节点梯度的基础上如何实现反向传播计算变量的梯度以及通过反向传播算法得到的梯度实现梯度下降算法优化来优化节点中的参数。最后我们使用实现的simpleflow完成一个线性回归模型的优化。
附上simpleflow代码: https://github.com/PytLab/simpleflow
Read More
前言
上一篇中介绍了计算图以及前向传播的实现,本文中将主要介绍对于模型优化非常重要的反向传播算法以及反向传播算法中梯度计算的实现。因为在计算梯度的时候需要涉及到矩阵梯度的计算,本文针对几种常用操作的梯度计算和实现进行了较为详细的介绍。如有错误欢迎指出。
首先先简单总结一下, 实现反向传播过程主要就是完成两个任务:
- 实现不同操作输出对输入的梯度计算
- 实现根据链式法则计算损失函数对不同节点的梯度计算
再附上SimpleFlow的代码地址: https://github.com/PytLab/simpleflow
Read More
前段时间因为课题需要使用了一段时间TensorFlow,感觉这种框架很有意思,除了可以搭建复杂的神经网络,也可以优化其他自己需要的计算模型,所以一直想自己学习一下写一个类似的图计算框架。前几天组会开完决定着手实现一个模仿TensorFlow接口的简陋版本图计算框架以学习计算图程序的编写以及前向传播和反向传播的实现。目前实现了前向传播和反向传播以及梯度下降优化器,并写了个优化线性模型的例子。
代码放在了GitHub上,取名SimpleFlow, 仓库链接: https://github.com/PytLab/simpleflow
Read More