Плотный слой Keras отображает слишком много параметров в kaggle

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

#python #тензорный поток #keras #глубокое обучение #conv-нейронная сеть

Вопрос:

 def my_model():
    inputs = keras.Input(shape=(height,width,3))
    x = layers.Conv2D(32,3)(inputs)
    x = layers.BatchNormalization(input_shape=(32,32,3))(x)
    x = keras.activations.tanh(x)
    x = layers.MaxPooling2D(pool_size=(2,2))(x)
    x = layers.Conv2D(filters=64,kernel_size=(5,5),padding="valid")(x)
    x = layers.BatchNormalization()(x)
    x = keras.activations.tanh(x)
    x = layers.Conv2D(filters=128,kernel_size=(3,3),padding="valid")(x)
    x = layers.BatchNormalization()(x)
    x = layers.Flatten()(x)
    x = layers.Dense(64,activation="tanh")(x)
    outputs = layers.Dense(35)(x)
    
    model = keras.Model(inputs=inputs, outputs = x)
    return model
 
 model = my_model()
model.compile(
    loss='categorical_crossentropy',
    optimizer=keras.optimizers.Adam(lr=3e-4),
    metrics=["accuracy"]
)
model.summary()
 

это приводит к выводу:

Модель: «functional_11»


Слой (тип) Параметр формы вывода #

input_7 (InputLayer) [(None, 200, 200, 3)] 0


conv2d_18 (Conv2D) (Нет, 198, 198, 32) 896


batch_normalization_18 (Batc (None, 198, 198, 32) 128


tf_op_layer_Tanh_12 (TensorF [(None, 198, 198, 32)] 0


max_pooling2d_6 (MaxPooling2 (None, 99, 99, 32) 0


conv2d_19 (Conv2D) (Нет, 95, 95, 64) 51264


batch_normalization_19 (Batc (None, 95, 95, 64) 256


tf_op_layer_Tanh_13 (TensorF [(None, 95, 95, 64)] 0


conv2d_20 (Conv2D) (Нет, 93, 93, 128) 73856


batch_normalization_20 (Batc (None, 93, 93, 128) 512


flatten_6 (Сгладить) (нет, 1107072) 0


dense_6 (Плотный) (нет, 64) 70852672


dense_7 (Плотный) (нет, 35) 2275

Всего параметров: 70 981 859 обучаемых параметров: 70 981 411 Необучаемых параметров: 448


Здесь слой dense_6 с 64 единицами показывает огромное количество параметров. Я использую kaggle, может кто-нибудь мне помочь, указав на мою ошибку?

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

1. Количество параметров Плотного слоя зависит как от количества нейронов, так и от количества входных объектов, так что здесь нет ничего плохого.

2. Ошибки нет, ввод в плотный слой (вывод flatten) огромен, более миллиона единиц (93*93*128 ). Вы можете добавить больше слоев объединения (или увеличить размер существующих слоев объединения / объединения), чтобы уменьшить карты объектов. Например. если вы уменьшите размер в 4 раза больше (до 23×23), у вас будет только ~ 4 миллиона параметров в плотном слое.

3. спасибо, я этого не знал, я думал, тут какая-то ошибка

Ответ №1:

Это нормально, у вас 1 107 072 нейрона, полностью подключенных к 64 нейронам. Таким образом, количество параметров равно :

  • input_length * output_length output_length = 1,107,072 * 64 64 = 70 852 672.

Если это слишком много для вашей проблемы, вам следует уменьшить размер перед flatten() слоем. Например, используйте больше слоев пула или вычисляйте меньше фильтров.

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

1. Спасибо, что прояснили для меня эту часть, я только начинаю в этой области. Я просто не мог понять это сам.