model.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from keras import Input, Model
  2. from keras.layers import Dense, Conv2D, Reshape, BatchNormalization, \
  3. LeakyReLU, MaxPooling2D, Dropout, GlobalAveragePooling2D
  4. def cnn_net(input_shape, output_shape=5710):
  5. _input = Input(input_shape)
  6. use_bias = False
  7. down0 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(_input)
  8. down0 = BatchNormalization()(down0)
  9. down0 = LeakyReLU(alpha=0.1)(down0)
  10. down0 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(down0)
  11. down0 = BatchNormalization()(down0)
  12. down0 = LeakyReLU(alpha=0.1)(down0)
  13. down0_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0)
  14. down1 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down0_pool)
  15. down1 = BatchNormalization()(down1)
  16. down1 = LeakyReLU(alpha=0.1)(down1)
  17. down1 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down1)
  18. down1 = BatchNormalization()(down1)
  19. down1 = LeakyReLU(alpha=0.1)(down1)
  20. down1_pool = MaxPooling2D((2, 2), strides=(2, 2))(down1)
  21. down2 = Conv2D(128, (3, 3), padding='same', use_bias=use_bias)(down1_pool)
  22. down2 = BatchNormalization()(down2)
  23. down2 = LeakyReLU(alpha=0.1)(down2)
  24. down2 = Conv2D(128, (3, 3), padding='same', use_bias=use_bias)(down2)
  25. down2 = BatchNormalization()(down2)
  26. down2 = LeakyReLU(alpha=0.1)(down2)
  27. down2_pool = MaxPooling2D((2, 2), strides=(2, 2))(down2)
  28. conv = Conv2D(256, (3, 3))(down2_pool)
  29. bn = BatchNormalization()(conv)
  30. rl = LeakyReLU(alpha=0.1)(bn)
  31. conv = Conv2D(256, (3, 3))(rl)
  32. bn = BatchNormalization()(conv)
  33. rl = LeakyReLU(alpha=0.1)(bn)
  34. dense = Dense(128, activation="relu")(rl)
  35. drop = Dropout(0.2)(dense)
  36. dense = Dense(output_shape, activation="softmax")(drop)
  37. x = Reshape((output_shape,))(dense)
  38. model = Model(_input, x)
  39. # model.summary()
  40. return model
  41. def cnn_net_tiny(input_shape, output_shape=6270):
  42. _input = Input(input_shape)
  43. use_bias = False
  44. down0 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(_input)
  45. down0 = BatchNormalization()(down0)
  46. down0 = LeakyReLU(alpha=0.1)(down0)
  47. down0 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(down0)
  48. down0 = BatchNormalization()(down0)
  49. down0 = LeakyReLU(alpha=0.1)(down0)
  50. down0_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0)
  51. down1 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(down0_pool)
  52. down1 = BatchNormalization()(down1)
  53. down1 = LeakyReLU(alpha=0.1)(down1)
  54. down1 = Conv2D(32, (3, 3), padding='same', use_bias=use_bias)(down1)
  55. down1 = BatchNormalization()(down1)
  56. down1 = LeakyReLU(alpha=0.1)(down1)
  57. down1_pool = MaxPooling2D((2, 2), strides=(2, 2))(down1)
  58. down2 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down1_pool)
  59. down2 = BatchNormalization()(down2)
  60. down2 = LeakyReLU(alpha=0.1)(down2)
  61. down2 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down2)
  62. down2 = BatchNormalization()(down2)
  63. down2 = LeakyReLU(alpha=0.1)(down2)
  64. down2_pool = MaxPooling2D((2, 2), strides=(2, 2))(down2)
  65. conv = Conv2D(64, (3, 3))(down2_pool)
  66. bn = BatchNormalization()(conv)
  67. rl = LeakyReLU(alpha=0.1)(bn)
  68. conv = Conv2D(64, (3, 3))(rl)
  69. bn = BatchNormalization()(conv)
  70. rl = LeakyReLU(alpha=0.1)(bn)
  71. conv = Conv2D(output_shape, (1, 1), activation='softmax')(rl)
  72. pool = GlobalAveragePooling2D()(conv)
  73. x = Reshape((output_shape,))(pool)
  74. #
  75. # dense = Dense(16, activation="relu")(rl)
  76. # drop = Dropout(0.2)(dense)
  77. # dense = Dense(output_shape, activation="softmax")(drop)
  78. # drop = Dropout(0.2)(dense)
  79. # x = Reshape((output_shape,))(drop)
  80. model = Model(_input, x)
  81. model.summary()
  82. return model
  83. def cnn_net_small(input_shape, output_shape=6270):
  84. _input = Input(input_shape)
  85. use_bias = False
  86. down0 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(_input)
  87. down0 = BatchNormalization()(down0)
  88. down0 = LeakyReLU(alpha=0.1)(down0)
  89. down0 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down0)
  90. down0 = BatchNormalization()(down0)
  91. down0 = LeakyReLU(alpha=0.1)(down0)
  92. down0_pool = MaxPooling2D((2, 2), strides=(2, 2))(down0)
  93. down1 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down0_pool)
  94. down1 = BatchNormalization()(down1)
  95. down1 = LeakyReLU(alpha=0.1)(down1)
  96. down1 = Conv2D(64, (3, 3), padding='same', use_bias=use_bias)(down1)
  97. down1 = BatchNormalization()(down1)
  98. down1 = LeakyReLU(alpha=0.1)(down1)
  99. down1_pool = MaxPooling2D((2, 2), strides=(2, 2))(down1)
  100. down2 = Conv2D(128, (3, 3), padding='same', use_bias=use_bias)(down1_pool)
  101. down2 = BatchNormalization()(down2)
  102. down2 = LeakyReLU(alpha=0.1)(down2)
  103. down2 = Conv2D(128, (3, 3), padding='same', use_bias=use_bias)(down2)
  104. down2 = BatchNormalization()(down2)
  105. down2 = LeakyReLU(alpha=0.1)(down2)
  106. down2_pool = MaxPooling2D((2, 2), strides=(2, 2))(down2)
  107. conv = Conv2D(128, (3, 3))(down2_pool)
  108. bn = BatchNormalization()(conv)
  109. rl = LeakyReLU(alpha=0.1)(bn)
  110. conv = Conv2D(128, (3, 3))(rl)
  111. bn = BatchNormalization()(conv)
  112. rl = LeakyReLU(alpha=0.1)(bn)
  113. conv = Conv2D(output_shape, (1, 1), activation='softmax')(rl)
  114. pool = GlobalAveragePooling2D()(conv)
  115. x = Reshape((output_shape,))(pool)
  116. model = Model(_input, x)
  117. model.summary()
  118. return model