#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 — результат последнего слоя, который необходимо сравнить с тестовым набором