CNN + LSTM

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CNN + LSTM相关的知识,希望对你有一定的参考价值。

参考技术A

CNN能够提取输入项目的特征,但是它不会去管这些特征在哪里
LSTM是RNN的变体,能够处理序列化的输入,该网络的内部机制能够选择性的记忆或者遗忘输入的信息,最后得到输入信息在不同环境下的表示。长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。具体内部机制详见大佬链接[ https://zhuanlan.zhihu.com/p/32085405]
情感分析 :
第一个尝试的模型是CNN-LSTM 模型,我们的CNN-LSTM 模型结合由初始的卷积层组成,这将接收word embedding(对文档中每个不同的单词都得到一个对应的向量)作为输入。然后将其输出汇集到一个较小的尺寸,然后输入到LSTM层。隐藏在这个模型后面的直觉是卷积层将提取局部特征,然后LSTM层将能够使用所述特征的排序来了解输入的文本排序。实际上,这个模型并不像我们提出的其他LSTM-CNN模型那么强大。

CMakeLists(LSTM-ER-master/cnn/cnn)

  1 # ########## cnn library ##########
  2 # Sources:
  3 set(cnn_library_SRCS
  4     cnn.cc
  5     conv.cc
  6     deep-lstm.cc
  7     dict.cc
  8     dim.cc
  9     exec.cc
 10     expr.cc
 11     grad-check.cc
 12     graph.cc
 13     gru.cc
 14     init.cc
 15     lstm.cc
 16     model.cc
 17     nodes.cc
 18     nodes-common.cc
 19     param-nodes.cc
 20     rnn.cc
 21     rnn-state-machine.cc
 22     saxe-init.cc
 23     shadow-params.cc
 24     tensor.cc
 25     training.cc
 26     treelstm.cc
 27 )
 28 
 29 # Headers:
 30 set(cnn_library_HDRS
 31     aligned-mem-pool.h
 32     c2w.h
 33     cnn.h
 34     conv.h
 35     cuda.h
 36     dict.h
 37     dim.h
 38     exec.h
 39     expr.h
 40     functors.h
 41     gpu-kernels.h
 42     gpu-ops.h
 43     graph.h
 44     gru.h
 45     init.h
 46     lstm.h
 47     model.h
 48     nodes.h
 49     param-nodes.h
 50     random.h
 51     rnn-state-machine.h
 52     rnn.h
 53     saxe-init.h
 54     shadow-params.h
 55     tensor.h
 56     timing.h
 57     training.h
 58     treelstm.h
 59 )
 60 
 61 if(WITH_CUDA_BACKEND)
 62   list(APPEND cnn_library_SRCS
 63        cuda.cc)
 64 endif(WITH_CUDA_BACKEND)
 65 
 66 file(GLOB TEST_SRCS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} tests/*.cc)
 67 
 68 #foreach(test_src ${TEST_SRCS})
 69   #Extract the filename without an extension (NAME_WE)
 70 #  get_filename_component(testName ${test_src} NAME_WE)
 71 
 72   #Add compile target
 73 #  add_executable(${testName} ${test_src})
 74 
 75   #link to Boost libraries AND your targets and dependencies
 76 #  target_link_libraries(${testName} cnn ${LIBS})
 77 
 78 #  set_target_properties(${testName} PROPERTIES
 79 #      RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests.bin)
 80 
 81   #Finally add it to test execution -
 82   #Notice the WORKING_DIRECTORY and COMMAND
 83 #  add_test(NAME ${testName}
 84 #     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tests.bin
 85 #     COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tests.bin/${testName} )
 86 #endforeach(test_src)
 87 
 88 # actual target:
 89 add_library(cnn ${cnn_library_SRCS} ${cnn_library_HDRS} ${LIBS})
 90 #add_library(cnn SHARED ${cnn_library_SRCS} ${cnn_library_HDRS} ${LIBS})
 91 if(WITH_CUDA_BACKEND)
 92   set(CUDA_SEPARABLE_COMPILATION ON)
 93   list(APPEND CUDA_NVCC_FLAGS "-gencode;arch=compute_20,code=sm_20;-gencode;arch=compute_30,code=sm_30;-gencode;arch=compute_35,code=sm_35;-gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_52,code=sm_52;-gencode;arch=compute_52,code=compute_52;-std=c++11;-O2;-DVERBOSE")
 94   SET(CUDA_PROPAGATE_HOST_FLAGS OFF)
 95   cuda_add_library(cnncuda STATIC gpu-ops.cu)
 96 endif(WITH_CUDA_BACKEND)
 97 
 98 install(FILES ${cnn_library_HDRS} DESTINATION include/cnn)
 99 install(TARGETS cnn DESTINATION lib)
100 
101 # target_compile_features(cnn PRIVATE cxx_range_for)

1-27: 将cnn_library_SRCS设置为由各个.cc文件名组成的list,各个文件名由分号分隔。

29-59: 将cnn_library_HDRS设置为由各个.h文件名组成的list,各个文件名由分号分隔。

后边的看不懂,也找不到资料看,暂时发现这一段来源于clab的lstm-parser

以上是关于CNN + LSTM的主要内容,如果未能解决你的问题,请参考以下文章

基于区域的CNN(R-CNN)

一小时吃透 R-CNN & Fast R-CNN & Faster R-CNN

r-cnn学习系列:从r-cnn到faster r-cnn

我们如何结合 ANN+CNN 和结合 CNN+SVM?

R-CNN/Fast R-CNN/Faster R-CNN

CNN和Transformer相结合的模型