Поскольку, как вы упомянули, это всегда константа, не имеет смысла определять для нее отдельный входной слой;особенно учитывая, что это не вход вашей модели.Я предлагаю вам использовать слой Lambda
вместо:
import numpy as np
from keras.layers import Input, Lambda
from keras.models import Model, load_model
def add_five(a):
return a + 5
inputs = Input(shape=(1,))
output = Lambda(add_five)(inputs)
model = Model(inputs, output)
model.compile(loss='mse', optimizer='adam')
X = np.array([1,2,3,4,5,6,7,8,9,10])
model.predict(X)
Вывод:
array([[ 6.],
[ 7.],
[ 8.],
[ 9.],
[10.],
[11.],
[12.],
[13.],
[14.],
[15.]], dtype=float32)
И при сохранении и перезагрузке проблем не возникнетмодель, так как функция add_five
была сохранена в файле модели.
Обновление: Вы можете расширить это в случае, когда каждая входная выборка состоит из более чем одного элемента.Например, если входная форма равна (2,)
и вы хотите добавить 5 к первому элементу и 10 ко второму элементу каждого образца, вы можете легко изменить функцию add_five
и переопределить ее следующим образом:
def add_constants(a):
return a + [5, 10]
# ... the same as above (just change the function name and input shape)
X = np.array([1,2,3,4,5,6,7,8,9,10]).reshape(5, 2)
model.predict(X)
Выход:
# X
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10]])
# predictions
array([[ 6., 12.],
[ 8., 14.],
[10., 16.],
[12., 18.],
[14., 20.]], dtype=float32)