You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

new-param-load-api.md 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. ## current param load api
  2. ### Cons
  3. #### long and awful code
  4. #### three functions
  5. #### not extensible
  6. #### no default value
  7. #### no variable length array
  8. ```
  9. MyLayer mylayer 1 1 in out 100 1.250000
  10. ```
  11. ```
  12. binary 100
  13. binary 1.250000
  14. ```
  15. ```
  16. #if NCNN_STDIO
  17. #if NCNN_STRING
  18. int MyLayer::load_param(FILE* paramfp)
  19. {
  20. int nscan = fscanf(paramfp, "%d %f", &a, &b);
  21. if (nscan != 2)
  22. {
  23. fprintf(stderr, "MyLayer load_param failed %d\n", nscan);
  24. return -1;
  25. }
  26. return 0;
  27. }
  28. #endif // NCNN_STRING
  29. int MyLayer::load_param_bin(FILE* paramfp)
  30. {
  31. fread(&a, sizeof(int), 1, paramfp);
  32. fread(&b, sizeof(float), 1, paramfp);
  33. return 0;
  34. }
  35. #endif // NCNN_STDIO
  36. int MyLayer::load_param(const unsigned char*& mem)
  37. {
  38. a = *(int*)(mem);
  39. mem += 4;
  40. b = *(float*)(mem);
  41. mem += 4;
  42. return 0;
  43. }
  44. ```
  45. ## new param load api proposed
  46. ### Pros
  47. #### clean and simple api
  48. #### default value
  49. #### extensible
  50. #### variable length array
  51. ```
  52. 7767517
  53. MyLayer mylayer 1 1 in out 0=100 1=1.250000 -23303=5,0.1,0.2,0.4,0.8,1.0
  54. ```
  55. ```
  56. binary 0xDD857600(magic)
  57. binary 0
  58. binary 100
  59. binary 1
  60. binary 1.250000
  61. binary -23303
  62. binary 5
  63. binary 0.1
  64. binary 0.2
  65. binary 0.4
  66. binary 0.8
  67. binary 1.0
  68. binary -233(EOP)
  69. ```
  70. ```
  71. int MyLayer::load_param(const ParamDict& pd)
  72. {
  73. // pd.get( param id (seq), default value );
  74. a = pd.get(0, 100);
  75. b = pd.get(1, 1.25f);
  76. // get default value for c if not specified in param file
  77. c = pd.get(2, 0.001);
  78. // get array
  79. d = pd.get(3, Mat(len, array));
  80. return 0;
  81. }
  82. ```