models.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. #
  4. # models.py
  5. #
  6. # Copyright 2022 Stephen Stengel <stephen.stengel@cwu.edu> and friends
  7. #
  8. import tensorflow as tf
  9. from keras.models import Sequential
  10. from keras.applications.inception_v3 import InceptionV3
  11. from keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense, Dropout
  12. from keras.losses import SparseCategoricalCrossentropy
  13. def createHarlowModel(shapeTupple):
  14. hModel = Sequential(
  15. [
  16. Input(shapeTupple),
  17. Conv2D(32, 3, 1, padding='same', activation='relu'),
  18. Conv2D(64, 3, 1, padding='same', activation='relu'),
  19. MaxPooling2D(pool_size=(2, 2)),
  20. Conv2D(128, 3, 1, padding='same', activation='relu'),
  21. Conv2D(256, 3, 1, padding='same', activation='relu'),
  22. MaxPooling2D(pool_size=(2, 2)),
  23. Flatten(),
  24. Dense(128, activation='relu'),
  25. Dense(8, activation='softmax') #Needed for sparse categorical crossentropy
  26. ]
  27. )
  28. hModel.compile(
  29. optimizer=tf.keras.optimizers.Adam(), # default learning rate is 0.001
  30. loss = SparseCategoricalCrossentropy(from_logits=False),
  31. metrics=['accuracy'])
  32. return hModel
  33. def inceptionV3Model(shapeTupple):
  34. base_model = InceptionV3(
  35. weights='imagenet',
  36. include_top=False,
  37. input_shape=shapeTupple
  38. )
  39. base_model.trainable = False
  40. v3_model = Sequential(
  41. [
  42. base_model,
  43. MaxPooling2D(pool_size=(2, 2), padding='same'),
  44. Dropout(0.1),
  45. Flatten(),
  46. Dense(64, activation='relu'),
  47. Dense(64, activation='relu'),
  48. Dense(32, activation='relu'),
  49. Dense(8, activation='softmax')
  50. ]
  51. )
  52. v3_model.compile(
  53. optimizer=tf.keras.optimizers.Adam(), # default learning rate is 0.001
  54. loss = SparseCategoricalCrossentropy(from_logits=False),
  55. metrics=['accuracy'])
  56. return v3_model
  57. def simpleModel(shapeTupple):
  58. model = tf.keras.models.Sequential([
  59. Input(shapeTupple),
  60. tf.keras.layers.Flatten(),
  61. tf.keras.layers.Dense(128, activation='relu'),
  62. tf.keras.layers.Dropout(0.1),
  63. tf.keras.layers.Dense(8, activation = "softmax")
  64. ])
  65. model.compile(
  66. optimizer=tf.keras.optimizers.Adam(), # default learning rate is 0.001
  67. loss = SparseCategoricalCrossentropy(from_logits=False),
  68. metrics=[tf.keras.metrics.SparseCategoricalAccuracy(name = "accuracy")])
  69. return model
  70. def mediumModel(shapeTupple):
  71. model = tf.keras.models.Sequential([
  72. Input(shapeTupple),
  73. tf.keras.layers.Flatten(),
  74. tf.keras.layers.Dense(256, activation='relu'),
  75. tf.keras.layers.Dropout(0.1),
  76. tf.keras.layers.Dense(256, activation='relu'),
  77. tf.keras.layers.Dense(8, activation = "softmax")
  78. ])
  79. model.compile(
  80. optimizer=tf.keras.optimizers.SGD(),
  81. loss = SparseCategoricalCrossentropy(from_logits=False),
  82. metrics=[tf.keras.metrics.SparseCategoricalAccuracy(name = "accuracy")]) #used name ="accuracy" so I don't have to re-write graphs
  83. return model