#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. Спасибо, это объясняет путаницу для меня!