Отладка выявила, что проблема заключается в том, что Керас использует сеанс по умолчанию, если он существует, и если в этом сеансе была выполнена некоторая инициализация, сброс графика вызывает путаницу у Кераса, потому что ожидается, что состояние сеанса не изменится, а график сеанса не будет сброшен. Я не видел ничего из этого в документации, и это заставило меня потратить несколько часов на эту проблему. Поэтому, если я хочу загрузить модель, а затем использовать ее несколько раз с вызовами reset_default_graph между ними, мне нужно сохранить сеанс с графиком примерно так:
def load():
with tf.Graph().as_default() as g:
config = tf.ConfigProto(log_device_placement=False)
config.gpu_options.allow_growth = True
sess = tf.Session(graph=g, config=config)
with sess.as_default():
model = load_model("model.h5")
model.summary()
X = np.random.normal(0, 1, (20,2))
pred = model.predict(X[np.newaxis])
print(pred)
return model, sess
model, sess = load()
with sess.as_default():
X = np.random.normal(0, 1, (20, 2))
pred = model.predict(X[np.newaxis])
print(pred)