(Извините, у меня недостаточно репутации, чтобы комментировать) Во-первых, знаете ли вы заранее, будут ли некоторые из выходных значений недопустимыми или это часть проблемы с прогнозированием, какие выходные данные будут действительно действительными?
Если вы не знаете заранее, какие выходы игнорировать, вы можете go с помощью чего-то вроде двухэтапного подхода, который вы описали в своем комментарии.
Если это детерминировано c (и вы знаете, как это сделать), какие выходы будут действительными для любого данного входа, и ваша проблема только в том, как настроить правильную модель, вот как я бы сделал это в keras :
- Используйте функциональный API
- Создайте 30 именованных выходных слоев (например, out_0, out_1, ... out_29)
- При создании модели просто используйте аргумент output для перечисления всех 30 выходов
- При компиляции модели укажите потери для каждого отдельного вывода, вы можете сделать это, передав словарь в аргумент потери, где ключи - это имена ваших выходных слоев, а значения представляют собой соответствующие потери
- Предполагая, что вы будете использовать среднеквадратичную ошибку для всех выходных данных, словарь будет выглядеть примерно так {'out_0': 'mse', 'out_1': ' mse ', ...,' out_29 ':' mse '}
- При передаче входных данных в модели передайте три вещи для каждого входа: x, y, веса потерь
- y должен быть словарем, где ключ - это выходной слой, называемый e, а значение - это целевое выходное значение
- Веса потерь также являются словарем в том же формате, что и y. Веса в вашем случае могут быть просто двоичными, 1 для каждого выхода, который соответствует реальному значению, 0 для каждого выхода, который соответствует нефизическим значениям (поэтому они не учитываются во время обучения) для любого заданного образца
- Don ' t pass None для нефизических целевых значений, используйте какой-нибудь заполнитель numeri c, иначе вы получите проблемы. Совершенно неважно, что вы используете для своего наполнителя, так как он не повлияет на градиенты во время обучения
Это даст вам обучаемую модель. НО после того, как вы перейдете от обучения и попытаетесь предсказать новые данные, ВАМ придется решить, какие выходные данные игнорировать для каждой выборки, сеть, скорее всего, по-прежнему будет давать вам «действительные» выходы для этих входов.