Я строю модель Keras, основанную на MobilEnetv2 для прогнозирования 6 человеческих компетенций. Каждая выходная головка представляет компетентность и представляет собой Softmax более 100 классов (баллы 0–99). Модель принимает 224x224 рамки RGB, нормализованную с [-1, 1] (совместимая с предварительной обработкой MobilEnetV2). Стоит отметить, что мой набор данных довольно маленький (138 5-минутные видео обрабатываемые кадры по кадру). < /P>
Вот упрощенная версия моей модели: < /p>
def create_model(input_shape):
inputs = tf.keras.Input(shape=input_shape)
base_model = MobileNetV2(
input_tensor=inputs,
weights='imagenet',
include_top=False,
pooling='avg'
)
for layer in base_model.layers:
layer.trainable = False
for layer in base_model.layers[-20:]:
layer.trainable = True
x = base_model.output
x = layers.BatchNormalization()(x)
x = layers.Dense(256, use_bias=False)(x)
x = layers.BatchNormalization()(x)
x = layers.Activation('relu')(x)
x = layers.Dropout(0.3)(x)
x = layers.BatchNormalization()(x)
outputs = [
layers.Dense(
100,
activation='softmax',
kernel_initializer='he_uniform',
dtype='float32',
name=comp
)(x)
for comp in LABELS
]
model = tf.keras.Model(inputs=inputs, outputs=outputs)
lr_schedule = tf.keras.optimizers.schedules.CosineDecay(
initial_learning_rate=1e-4,
decay_steps=steps_per_epoch*EPOCHS,
warmup_target=5e-3,
warmup_steps=steps_per_epoch
)
opt = tf.keras.optimizers.Adam(lr_schedule, clipnorm=1.0)
opt = tf.keras.mixed_precision.LossScaleOptimizer(opt)
model.compile(
optimizer=opt,
loss={comp: tf.keras.losses.SparseCategoricalCrossentropy()
for comp in LABELS},
metrics=['accuracy']
)
return model
< /code>
Модель достигает очень высокой точности в учебных данных (возможно, переосмысление). Тем не менее, он предсказывает один и тот же выходной вектор для каждого входа, даже на случайных входах. Это дает очень низкое разнообразие прогнозирования предварительного обучения, а также < /p>
test_input = np.random.rand(1, 224, 224, 3).astype(np.float32)
predictions = model.predict(test_input)
print("Pre-train prediction diversity:", [np.std(p) for p in predictions])
< /code>
Мои вопросы:
1. Почему модель предсказывает один и тот же выходной вектор на разных входах - даже случайные - после тренировки?
2. Почему выходное разнообразие до тренировок так низкое?
Подробнее здесь: https://stackoverflow.com/questions/796 ... redictions
Постоянные прогнозы CNN ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение