Я использую Keras и Keras Tuner для создания CNN. В настоящее время я использую этот код ...
#Model with
def build_model(hp):
model = keras.Sequential()
#First BLOCK
model.add(keras.layers.Conv2D(filters=hp.Choice('conv_1_filter',
values=[32,64,128,256,512]),
kernel_size=hp.Choice('conv_1_kernel', values=[3,5]),
padding = 'same',
activation = 'relu',
input_shape=(224,224,3)))
for i in range(hp.Int('num_layers_1', 1, 3)):
model.add(keras.layers.Conv2D(filters=hp.Choice('conv_block1_filters_' + str(i),
values=[32,64,128,256,512]),
kernel_size=hp.Choice('con_block1_kernel_' + str(i),
values=[3,5]),
padding = 'same',
activation = 'relu'))
model.add(keras.layers.MaxPool2D(pool_size=(2,2),strides=(2,2)))
#CLASSIFIER
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(2048, activation = 'relu'))
model.add(keras.layers.Dense(7, activation = 'softmax'))
model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate',
values=[1e-2, 1e-3, 1e-4])),
loss='categorical_crossentropy',
metrics=['accuracy'])
return model
В настоящее время, когда модель решает, сколько контуров включить, она изменит размер фильтра между ними. Вместо этого я хотел бы, чтобы он просматривал циклы, чтобы увидеть, сколько слоев он выбирает, и количество фильтров остается неизменным.
Например, то, что делает в настоящее время, выберет количество слоев, давайте скажем, 2 и размер фильтра для этих двух слоев будет отличаться. Мне бы хотелось, чтобы размер фильтра для этих слоев был одинаковым.