SVMF32.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. #include "SVMF32.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. void SVMF32::test_svm_linear_predict_f32()
  5. {
  6. const float32_t *inp = samples.ptr();
  7. int32_t *refp = ref.ptr();
  8. int32_t *outp = output.ptr();
  9. int32_t *result;
  10. result=outp;
  11. for(int i =0; i < this->nbTestSamples; i++)
  12. {
  13. arm_svm_linear_predict_f32(&this->linear,inp,result);
  14. result++;
  15. inp += this->vecDim;
  16. }
  17. ASSERT_EQ(ref,output);
  18. }
  19. void SVMF32::test_svm_polynomial_predict_f32()
  20. {
  21. const float32_t *inp = samples.ptr();
  22. int32_t *refp = ref.ptr();
  23. int32_t *outp = output.ptr();
  24. int32_t *result;
  25. result=outp;
  26. for(int i =0; i < this->nbTestSamples; i++)
  27. {
  28. arm_svm_polynomial_predict_f32(&this->poly,inp,result);
  29. result++;
  30. inp += this->vecDim;
  31. }
  32. ASSERT_EQ(ref,output);
  33. }
  34. void SVMF32::test_svm_rbf_predict_f32()
  35. {
  36. const float32_t *inp = samples.ptr();
  37. int32_t *refp = ref.ptr();
  38. int32_t *outp = output.ptr();
  39. int32_t *result;
  40. result=outp;
  41. for(int i =0; i < this->nbTestSamples; i++)
  42. {
  43. arm_svm_rbf_predict_f32(&this->rbf,inp,result);
  44. result++;
  45. inp += this->vecDim;
  46. }
  47. ASSERT_EQ(ref,output);
  48. }
  49. void SVMF32::test_svm_sigmoid_predict_f32()
  50. {
  51. const float32_t *inp = samples.ptr();
  52. int32_t *refp = ref.ptr();
  53. int32_t *outp = output.ptr();
  54. int32_t *result;
  55. result=outp;
  56. for(int i =0; i < this->nbTestSamples; i++)
  57. {
  58. arm_svm_sigmoid_predict_f32(&this->sigmoid,inp,result);
  59. result++;
  60. inp += this->vecDim;
  61. }
  62. ASSERT_EQ(ref,output);
  63. }
  64. void SVMF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& testparams,Client::PatternMgr *mgr)
  65. {
  66. int kind;
  67. Testing::nbSamples_t nb=MAX_NB_SAMPLES;
  68. switch(id)
  69. {
  70. case SVMF32::TEST_SVM_LINEAR_PREDICT_F32_1:
  71. {
  72. samples.reload(SVMF32::SAMPLES1_F32_ID,mgr,nb);
  73. params.reload(SVMF32::PARAMS1_F32_ID,mgr,nb);
  74. dims.reload(SVMF32::DIMS1_S16_ID,mgr,nb);
  75. ref.reload(SVMF32::REF1_S32_ID,mgr,nb);
  76. }
  77. break;
  78. case SVMF32::TEST_SVM_POLYNOMIAL_PREDICT_F32_2:
  79. {
  80. samples.reload(SVMF32::SAMPLES2_F32_ID,mgr,nb);
  81. params.reload(SVMF32::PARAMS2_F32_ID,mgr,nb);
  82. dims.reload(SVMF32::DIMS2_S16_ID,mgr,nb);
  83. ref.reload(SVMF32::REF2_S32_ID,mgr,nb);
  84. }
  85. break;
  86. case SVMF32::TEST_SVM_RBF_PREDICT_F32_3:
  87. {
  88. samples.reload(SVMF32::SAMPLES3_F32_ID,mgr,nb);
  89. params.reload(SVMF32::PARAMS3_F32_ID,mgr,nb);
  90. dims.reload(SVMF32::DIMS3_S16_ID,mgr,nb);
  91. ref.reload(SVMF32::REF3_S32_ID,mgr,nb);
  92. }
  93. break;
  94. case SVMF32::TEST_SVM_SIGMOID_PREDICT_F32_4:
  95. {
  96. samples.reload(SVMF32::SAMPLES4_F32_ID,mgr,nb);
  97. params.reload(SVMF32::PARAMS4_F32_ID,mgr,nb);
  98. dims.reload(SVMF32::DIMS4_S16_ID,mgr,nb);
  99. ref.reload(SVMF32::REF4_S32_ID,mgr,nb);
  100. }
  101. break;
  102. case SVMF32::TEST_SVM_RBF_PREDICT_F32_5:
  103. {
  104. samples.reload(SVMF32::SAMPLES5_F32_ID,mgr,nb);
  105. params.reload(SVMF32::PARAMS5_F32_ID,mgr,nb);
  106. dims.reload(SVMF32::DIMS5_S16_ID,mgr,nb);
  107. ref.reload(SVMF32::REF5_S32_ID,mgr,nb);
  108. }
  109. break;
  110. }
  111. const int16_t *dimsp = dims.ptr();
  112. const float32_t *paramsp = params.ptr();
  113. kind = dimsp[0];
  114. this->classes[0] = dimsp[1];
  115. this->classes[1] = dimsp[2];
  116. this->nbTestSamples=dimsp[3];
  117. this->vecDim = dimsp[4];
  118. this->nbSupportVectors = dimsp[5];
  119. this->intercept=paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors];
  120. this->supportVectors=paramsp;
  121. this->dualCoefs=paramsp + (this->vecDim*this->nbSupportVectors);
  122. switch(kind)
  123. {
  124. case SVMF32::POLY:
  125. this->degree = dimsp[6];
  126. this->coef0 =paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors + 1] ;
  127. this->gamma=paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors + 2];
  128. break;
  129. case SVMF32::RBF:
  130. this->gamma=paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors + 1];
  131. break;
  132. case SVMF32::SIGMOID:
  133. this->coef0 =paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors + 1] ;
  134. this->gamma=paramsp[this->vecDim*this->nbSupportVectors + this->nbSupportVectors + 2];
  135. break;
  136. }
  137. switch(id)
  138. {
  139. case SVMF32::TEST_SVM_LINEAR_PREDICT_F32_1:
  140. {
  141. arm_svm_linear_init_f32(&linear,
  142. this->nbSupportVectors,
  143. this->vecDim,
  144. this->intercept,
  145. this->dualCoefs,
  146. this->supportVectors,
  147. this->classes);
  148. }
  149. break;
  150. case SVMF32::TEST_SVM_POLYNOMIAL_PREDICT_F32_2:
  151. {
  152. arm_svm_polynomial_init_f32(&poly,
  153. this->nbSupportVectors,
  154. this->vecDim,
  155. this->intercept,
  156. this->dualCoefs,
  157. this->supportVectors,
  158. this->classes,
  159. this->degree,
  160. this->coef0,
  161. this->gamma
  162. );
  163. }
  164. break;
  165. case SVMF32::TEST_SVM_RBF_PREDICT_F32_3:
  166. case SVMF32::TEST_SVM_RBF_PREDICT_F32_5:
  167. {
  168. arm_svm_rbf_init_f32(&rbf,
  169. this->nbSupportVectors,
  170. this->vecDim,
  171. this->intercept,
  172. this->dualCoefs,
  173. this->supportVectors,
  174. this->classes,
  175. this->gamma
  176. );
  177. }
  178. break;
  179. case SVMF32::TEST_SVM_SIGMOID_PREDICT_F32_4:
  180. {
  181. arm_svm_sigmoid_init_f32(&sigmoid,
  182. this->nbSupportVectors,
  183. this->vecDim,
  184. this->intercept,
  185. this->dualCoefs,
  186. this->supportVectors,
  187. this->classes,
  188. this->coef0,
  189. this->gamma
  190. );
  191. }
  192. break;
  193. }
  194. output.create(ref.nbSamples(),SVMF32::OUT_S32_ID,mgr);
  195. }
  196. void SVMF32::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  197. {
  198. output.dump(mgr);
  199. }