深度学习实践-003

Library工程更新到 https://github.com/Millieen/TestNeuronNetwork

· 实现了前向传播的计算(单线程)

  • 多核计算优化思路:

    • 每个wi * ai + bi作为最小计算单元,使用一个对象。每个对象使用一个子线程计算单元并给出结果。
    • 通过线程池控制线程(对象)数量,每个对象分配一个线程。线程池有空余的时候就创建新的对象用于计算。线程池无空闲的时候,就使用已有的空闲对象进行计算。使用一个队列来存放空闲的对象。
    • 线程池的上限可以通过配置文件改变,默认情况下为CPU线程数量。
    • 另一个优化思路:定义矩阵操作,在矩阵操作内部使用算法和多线程优化。而不是使用很多对象进行计算。这样更符合认知。

· 实现了反向传播Sigmoid函数求导,以及计算dW,db的部分函数。(尚未完成)

  • 实现中一度迷惑于dW的维数莫名其妙多出来一个,后来才发现需要计算所有的dZi取平均后的值。
  • 截止到第一课第二周第一节,还没有到多层的部分,所以反向传播暂时无法输出当前层的dA给上一层继续进行反向传播。
  • 需要通过矩阵操作进一步简化。

深度学习实践-001

之前在Coursera上看了Andrew(吴恩达)的DeepLearning相关课程 https://www.coursera.org/specializations/deep-learning 。用了接近两个月的时间看完视频做了作业,但是感觉理解的还是相当肤浅,于是决定使用C++来尝试着实现一个神经网络。一方面加深理解,另一方面也扩充一下自己很多方面的开发能力(Git,XCode,多线程,Qt等。。。)

XCode的Library工程提交到 https://github.com/Millieen/TestNeuronNetwork 上了。目前还是个空工程,之后慢慢更新~

这个Lib的目标是:
· 能够建立一个任意层、每层神经元个数任意的前馈神经网络。
· 激活函数包括ReLU和Sigmoid
· 使用多线程完成矩阵乘法运算。使用的线程个数可配置并能够查看相应的性能变化。
· 矩阵乘法可通过配置,扩展成CUDA加速的方式。

最基本的库完成后,会用Qt做一个配套的界面工程,来实现以上参数的可视化配置。


XCode下写Library挺坑的。工程配置好了,编译出了动态库,但是测试程序那边却无法正常连接更新后的dylib库,重新编译加函数之后,测试那边就总是报link error,看上去就是没有更新dylib的锅。
检查了一下报错信息,果然在 /Users/Millieen/Library/Developer/Xcode/DerivedData/testSNN-gsnjuxvmaggedqahtvdcmrpeqiej/Build/Products/Debug/下找到了之前没有更新的库,删除之,重新编译后成功了。暂时还没有搞清楚怎么自动替换这个库,以后更新库的时候先手动替换吧。

VisualStutio Building static Qt

source: qt-everywhere-opensource-src-4.7.3.tar.gz
platform: Visual Studio 2008 & Win7

Configure

Decompress Qt source.

edit configurations in mkspecs which match your environment(this case: win32-msvc2008):

1
2
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /LTCG /NODEFAULTLIB:libc.lib /NODEFAULTLIB:msvcrt.lib/NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
QMAKE_LFLAGS_DEBUG = /DEBUG /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib

Build

open VS Command prompt(or running vcvars32.bat in command)
go to your Qt path, run:

1
2
configure -static -debug-and-release -no-webkit -nomake demos -nomake examples -qt-sql-mysql
nmake

Refrences

Building Qt 4.2.3 for windows(chinese)
My blog(chinese)

Ubuntu Building static Qt

source: qt-everywhere-opensource-src-4.7.3.tar.gz
platform:Ubuntu

Configure environment

1
2
3
sudo apt-get install build-essential
sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev libglu1-mesa-dev libgtk2.0-dev
sudo apt-get install xorg-dev

Build & Install

Decompress qt sources, run configure:

1
2
3
./configure -static -debug-and-release -no-webkit -nomake demos -nomake examples -qt-sql-mysql
make sub-src
make install

edit /etc/profile, adding:

1
2
3
export QTDIR=/opt/qtsdk-xxxx/qt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
export PATH=$PATH:$QTDIR/bin

Refrences

My post(chinese)
Qt Downloads(chinese)

Hello Hexo

Welcome to my blog!

This is my first teconology blog. Hoping to work & study in github with you!

Later I’ll move some older blogs here, most of them are about Qt.