在使用torch时,如果想自己实现一个层,则可以按照《torch学习笔记1:实现自定义层》 中的方法来实现。但是如果想要实现一个比较复杂的网络,往往需要自己实现多个层(或类),并且有时可能需要重写其他模块中已有的函数来达到自己的目的,如果还是在nn模块中添加,会比较混乱,并且不利于本地git仓库统一管理,这个时候,我们可以自己实现一个像nn一样的模块,在代码中使用时 require即可。
我们来实现一个名为nxn的自定义模块,以及它的cuda版本cunxn模块,其中包含一个自定义的Hello类(lua实现),ReLU类(分别用CPU和GPU实现)。
由于篇幅原因,这里把torch自定义模块的lua实现,cpu实现,gpu实现分别写一篇文章,本文介绍cpu实现的ReLU类。
1 总目录结构和 2 使用说明 在 《torch学习笔记3.1:实现自定义模块(lua)》
3 文件说明
这里介绍的都是cunxn文件夹里面的。
CMakeLists.txt
可以参考torch自带模块来写,主要是cuda文件的编译和链接,需要注意的部分内容如下:
......
FIND_PACKAGE(CUDA 4.0 REQUIRED)
SET(src-cuda init.cu)
CUDA_ADD_LIBRARY(cunxn MODULE ${src-cuda})
TARGET_LINK_LIBRARIES(cunxn luaT THC TH)
IF(APPLE)
SET_TARGET_PROPERTIES(cunxn PROPERTIES
LINK_FLAGS "-undefined dynamic_lookup")
ENDIF()
### Torch packages supposes libraries prefix is "lib"
SET_TARGET_PROPERTIES(cunxn PROPERTIES
PREFIX "lib"
IMPORT_PREFIX "lib")
INSTALL(TARGETS cunxn
RUNTIME DESTINATION "${Torch_INSTALL_LUA_CPATH_SUBDIR}"
LIBRARY DESTINATION "${Torch_INSTALL_LUA_CPATH_SUBDIR