#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. Спасибо, что прояснили для меня эту часть, я только начинаю в этой области. Я просто не мог понять это сам.