Как добавить противопоказания между выводами в модель Keras

#python #tensorflow #keras

Вопрос:

Учитывая модель

 inputs = keras.layers.Input(shape=X.shape[1])
out = keras.layers.Dense(78, activation='relu')(inputs)
out = keras.layers.Dense(54, activation='relu')(out)
out = keras.layers.Dense(54, activation='relu')(out)
out = keras.layers.Dense(y.shape[1])(out)

X.shape is [:3], y.shape is [:5]
 

Мне нужно ввести ограничение, что y[1] >= y[0], например, если текущий выходной вектор> [0.74, 0.69, 0.32, 0,54, 0.44] , его необходимо изменить на [0.74, 0.74, 0.32, 0,54, 0.44] .

Возможное решение: ввести лямбда-слой и использовать пользовательскую функцию

 out = keras.layers.Lambda(constrainOut)(out)

def constrainOut(x): #not actual code
   for i in x:
       if i[1] > i[0]:
           ...
 

Проблема в том, что в constrainOut AFAIK я не могу легко подобрать векторы и изменить их. Функция вызывается при построении графика вычислений, а не во время фактического вычисления, поэтому числового вектора еще нет x . В лямбда-слоях функции могут работать только с тензором в целом, а список возможных операций ограничен перегруженными операторами объекта тензора и скомпилирован в график. я прав? и если да, то какое может быть другое решение?

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

1. Из вашего заявления the constraint that y[1] >= y[0], e.g. if the current output vector следует , что означает y ? Означает ли это вывод из какого-либо скрытого слоя или надписей ? Обычно y используется для обозначения меток или зависимых переменных в машинном обучении.

2. Также, если y имеется в виду вывод из каких-либо скрытых слоев, я не мог придумать ни одного варианта использования описанной проблемы.

3. Это регрессионная модель, а не классификатор. Там нет меток, последний слой линейный, вход и выход являются векторами реальных значений. Выходные данные согласованы с входными данными (например, аналогичные входные данные дают аналогичные выходные данные в обучающем наборе, и существует частичная линейность между некоторыми входами и некоторыми выходами). Входы и выходы нормализуются, так как параметры имеют разные единицы измерения. y — результат последнего слоя, который необходимо сравнить с тестовым набором