SyntaxError: позиционный аргумент следует за аргументом ключевого слова в модели CNN

#python #tensorflow #keras #conv-neural-network

#python #тензорный поток #keras #conv-нейронная сеть

Вопрос:

Я пытаюсь создать модель CNN и получаю следующую ошибку

 keras.layers.MaxPooling2D(pool_size = (2,2), padding= "same"),
    ^
SyntaxError: positional argument follows keyword argument
 

ошибка применяется, когда я хочу добавить отсев или максимальное объединение, я добавлю свой код ниже и прокомментирую строки, которые привели меня к упомянутой синтаксической ошибке.

Я получаю разные ошибки, когда пытаюсь запустить dropout и закомментировать maxpooling и наоборот.

Примечание: я использую hp.Choice и hp.Int от kerastuner из следующего документального фильма (https://keras-team.github.io/keras-tuner /) Он работает нормально, я почти уверен, что ошибка произошла не из-за неправильного использования.

   model = keras.Sequential([
    keras.layers.Conv2D(
        keras.layers.BatchNormalization(),
        input_shape = (img_rows, img_cols, 1),
        kernel_size = hp.Choice("conv1_kernel", values = [3, 6]),
        filters = hp.Int("conv1_filters", min_value = 32, max_value = 128, step = 16),
        #keras.layers.MaxPooling2D(pool_size = (2,2), padding= "same"),
        #keras.layers.Dropout(0.2),
        activation = "relu"
    ),

    keras.layers.Conv2D(
        keras.layers.BatchNormalization(),
        input_shape = (img_rows, img_cols, 1),
        kernel_size = hp.Choice("conv2_kernel", values = [3, 6]),
        filters = hp.Int("conv2_filters", min_value = 32, max_value = 64, step = 16),
        #keras.layers.MaxPooling2D(pool_size = (2,2), padding = "same"),
        #keras.layers.Dropout(0.5),
        activation = "relu"
    ), 
    

    keras.layers.Flatten(),
    keras.layers.Dense(
        units = hp.Int("dense1_units", min_value = 16, max_value = 256, step = 16),
        activation = "relu"

    ),
    
    keras.layers.Dense(units = 7, activation = "softmax")

  ])

  model.compile(optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', values=[1e-1, 1e-2, 1e-3])),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
  
  return model```

 

Ответ №1:

 keras.layers.MaxPooling2D(pool_size = (2,2), padding= "same"),
keras.layers.Dropout(0.2),
 

являются теми же объектами, keras.layers.Conv2D что и: они являются слоями и должны быть добавлены таким же образом в архитектуру модели:

 keras.layers.Conv2D(
        input_shape = (img_rows, img_cols, 1),
        kernel_size = hp.Choice("conv1_kernel", values = [3, 6]),
        filters = hp.Int("conv1_filters", min_value = 32, max_value = 128, step = 16),
        activation = "relu"
    ),

keras.layers.BatchNormalization(),
keras.layers.MaxPooling2D(pool_size = (2,2), padding= "same"),
keras.layers.Dropout(0.2),
 

Комментарии:

1. Спасибо, это объясняет путаницу для меня!