298 lines
11 KiB
Python
298 lines
11 KiB
Python
from convolution_model_tools.convolution_2D_tools import model_2D_tool
|
|
from dense_model_tools.dense_tools import model_Dense_Layer
|
|
from all_models_tools.all_model_tools import add_optimizers_function, add_Activative, add_dropout, call_back
|
|
from keras.activations import softmax, sigmoid
|
|
from keras.applications import VGG19, ResNet50, NASNetLarge, DenseNet201, Xception
|
|
from keras.applications.efficientnet_v2 import EfficientNetV2L
|
|
from keras.layers import BatchNormalization, Flatten, GlobalAveragePooling2D, MaxPooling2D, Dense, Conv2D, Dropout, TimeDistributed, LSTM, Input
|
|
from keras import regularizers
|
|
|
|
def one_layer_cnn_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
img_Input = tools.add_2D_input()
|
|
x = tools.add_Convolution2D(img_Input, 32)
|
|
x = add_Activative(x)
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_Convolution2D(x, 64)
|
|
x = add_Activative(x)
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
flatter = tools.add_flatten(x)
|
|
|
|
dense = dense_tool.add_dense(64, flatter)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(32, dense)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
return img_Input, dense
|
|
|
|
def find_example_cnn_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
img_Input = tools.add_2D_input()
|
|
|
|
x = tools.add_Convolution2D(img_Input, 16)
|
|
x = add_Activative(x)
|
|
x = add_dropout(x, 0.25)
|
|
|
|
x = tools.add_Convolution2D(x, 32)
|
|
x = add_Activative(x)
|
|
x = add_dropout(x, 0.25)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_Convolution2D(x, 64)
|
|
x = add_Activative(x)
|
|
x = add_dropout(x, 0.25)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_Convolution2D(x, 128)
|
|
x = add_Activative(x)
|
|
x = add_dropout(x, 0.25)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
flatter = tools.add_flatten(x)
|
|
|
|
dense = dense_tool.add_dense(64, flatter)
|
|
dense = add_Activative(dense)
|
|
dense = add_dropout(dense, 0.25)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, sigmoid)
|
|
|
|
return img_Input, dense
|
|
|
|
def change_example_cnn_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
img_Input = tools.add_2D_input()
|
|
|
|
x = tools.add_Convolution2D(img_Input, 16)
|
|
x = add_Activative(x)
|
|
x = tools.add_batchnomlization(x)
|
|
|
|
x = tools.add_Convolution2D(x, 32)
|
|
x = add_Activative(x)
|
|
x = tools.add_batchnomlization(x)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_Convolution2D(x, 64)
|
|
x = add_Activative(x)
|
|
x = tools.add_batchnomlization(x)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_Convolution2D(x, 128)
|
|
x = add_Activative(x)
|
|
x = tools.add_batchnomlization(x)
|
|
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
flatter = tools.add_flatten(x)
|
|
|
|
dense = dense_tool.add_dense(64, flatter)
|
|
dense = add_Activative(dense)
|
|
dense = add_dropout(dense, 0.3)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return img_Input, dense
|
|
|
|
def two_convolution_cnn_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
img_Input = tools.add_2D_input()
|
|
x = tools.add_two_floors_convolution2D(img_Input, 32)
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
x = tools.add_two_floors_convolution2D(x, 64)
|
|
x = tools.add_MaxPooling(x)
|
|
|
|
flatter = tools.add_flatten(x)
|
|
|
|
dense = dense_tool.add_dense(64, flatter)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(32, dense)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
return img_Input, dense
|
|
|
|
def VGG19_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
vgg19 = VGG19(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(vgg19.output)
|
|
dense = dense_tool.add_dense(64, flatten)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return vgg19, dense
|
|
|
|
def Resnet50_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
vgg19 = ResNet50(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(vgg19.output)
|
|
dense = dense_tool.add_dense(64, flatten)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return vgg19, dense
|
|
|
|
def DenseNet201_model():
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Densenet201 = DenseNet201(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Densenet201.output)
|
|
dense = dense_tool.add_dense(64, flatten)
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Densenet201, dense
|
|
|
|
def Xception_model():
|
|
xception = Xception(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = Flatten()(xception.output)
|
|
dense = Dense(units = 64, activation = "relu")(flatten)
|
|
dense = Dense(units = 7, activation = "softmax")(dense)
|
|
|
|
return xception, dense
|
|
|
|
def cnn_LSTM():
|
|
head = Input(shape = (150, 150, 3))
|
|
inputs = Conv2D(filters = 64, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(head)
|
|
inputs = Conv2D(filters = 64, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = MaxPooling2D(strides = 2, pool_size = (2, 2))(inputs)
|
|
inputs = Dropout(0.25)(inputs)
|
|
|
|
inputs = Conv2D(filters = 128, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 128, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = MaxPooling2D(strides = 2, pool_size = (2, 2))(inputs)
|
|
inputs = Dropout(0.25)(inputs)
|
|
|
|
inputs = Conv2D(filters = 256, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 256, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = MaxPooling2D(strides = 2, pool_size = (2, 2))(inputs)
|
|
inputs = Dropout(0.25)(inputs)
|
|
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = MaxPooling2D(strides = 2, pool_size = (2, 2))(inputs)
|
|
inputs = Dropout(0.25)(inputs)
|
|
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = Conv2D(filters = 512, strides = 1, kernel_size = (3, 3), padding = "same", activation = "relu")(inputs)
|
|
inputs = MaxPooling2D(strides = 2, pool_size = (2, 2))(inputs)
|
|
inputs = Dropout(0.25)(inputs)
|
|
inputs = TimeDistributed(Flatten())(inputs)
|
|
|
|
inputs = LSTM(units = 49)(inputs)
|
|
inputs = Dense(units = 64)(inputs)
|
|
output = Dense(units = 7, activation = "softmax")(inputs)
|
|
|
|
return head, output
|
|
|
|
def add_regularizers_L1(): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Resnet50 = ResNet50(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Resnet50.output)
|
|
dense = dense_tool.add_regularizer_dense(64, flatten, regularizers.L1())
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Resnet50, dense
|
|
|
|
def add_regularizers_L2(): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Resnet50 = ResNet50(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Resnet50.output)
|
|
dense = dense_tool.add_regularizer_dense(64, flatten, regularizers.L2())
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Resnet50, dense
|
|
|
|
def add_regularizers_L1L2(): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Resnet50 = ResNet50(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Resnet50.output)
|
|
dense = dense_tool.add_regularizer_dense(64, flatten, regularizers.L1L2())
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Resnet50, dense
|
|
|
|
def add_layers1_L2(Dense_layers): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
layers = 32
|
|
|
|
Densenet201 = DenseNet201(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Densenet201.output)
|
|
|
|
for layer in range(Dense_layers):
|
|
dense = dense_tool.add_regularizer_kernel_dense(unit = layers, input_data = flatten, regularizer = regularizers.L2())
|
|
dense = add_Activative(dense)
|
|
layers *= 2
|
|
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Densenet201, dense
|
|
|
|
def add_layers_another_L2(Dense_layers, layers): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Densenet201 = DenseNet201(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Densenet201.output)
|
|
|
|
for layer in range(Dense_layers):
|
|
dense = dense_tool.add_regularizer_dense(unit = layers, input_data = flatten, regularizer = regularizers.L2())
|
|
dense = add_Activative(dense)
|
|
layers /= 2
|
|
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Densenet201, dense
|
|
|
|
def add_bias_regularizers(): # 比較正規化
|
|
tools = model_2D_tool()
|
|
dense_tool = model_Dense_Layer()
|
|
|
|
Resnet50 = ResNet50(include_top = False, weights = "imagenet", input_shape = (120, 120, 3))
|
|
flatten = tools.add_flatten(Resnet50.output)
|
|
dense = dense_tool.add_regularizer_bias_dense(64, flatten, regularizers.L2())
|
|
dense = add_Activative(dense)
|
|
dense = dense_tool.add_dense(7, dense)
|
|
dense = add_Activative(dense, softmax)
|
|
|
|
return Resnet50, dense |