Моя модель написана на керасе. Он имеет несколько входов, один из которых должен быть умножен на выходы предпоследнего слоя Dense перед подачей логитов в softmax. Это поэлементное умножение выполняется с помощью лямбда-слоя.
def mul(x, mask):
output = x*mask
return output
logits = Lambda(lambda x: mul(x, input_2))(dense_output) # gives nan after first update
После первого обновления модели лямбда-слой начинает выдавать NaN в качестве вывода.
Этого не происходит, если у меня есть постоянный вектор, определенный в вычислительном графе, который умножается на результат плотного слоя.
logits = dense_output * [1, 1, 1, 1, 1, -100, 1, -100, 1, 1] # does not give nan
Я также пробовал использовать Multiply Layer, предоставляемый Keras. Но это тоже выбрасывает NaN после первого обновления. Вот фрагмент того же:
logits = Multiply()([dense_output, input_2]) # gives nan after first update
Я в основном хочу замаскировать определенные состояния вывода с помощью этого умножения на ввод, но не могу этого сделать, если слой продолжает выдавать NaN в качестве вывода.
Есть ли способ решить эту проблему? Любая помощь будет оценена!