'tf' 未在 load_model() 上定义 - 使用 lambda

新手上路,请多包涵

我有一个 Keras 模型,我正在尝试导出并在不同的 python 代码中使用。

这是我的代码:

 from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM, GRU, Flatten, Dropout, Lambda
from keras.layers.embeddings import Embedding
import tensorflow as tf

EMBEDDING_DIM = 100

model = Sequential()
model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))
model.add(Lambda(lambda x: tf.reduce_mean(x, axis=1)))
model.add(Dense(8, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train_pad, y_train, batch_size=128, epochs=25, validation_data=(X_val_pad, y_val), verbose=2)
model.save('my_model.h5')


另一个文件 中,当我导入 my_model.h5 时:

 from keras.models import load_model
from keras.layers import Lambda
import tensorflow as tf

def learning(test_samples):
    model = load_model('my_model.h5')
    #ERROR HERE
    #rest of the code

错误如下:

   in <lambda>
    model.add(Lambda(lambda x: tf.reduce_mean(x, axis=1)))
NameError: name 'tf' is not defined

经过研究,我发现 我在我的模型中使用了 lambda 是这个问题的原因,但我添加了这些参考并没有帮助:

 from keras.models import load_model
from keras.layers import Lambda
import tensorflow as tf

可能是什么问题呢?

谢谢

原文由 HelpASisterOut 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 638
2 个回答

加载模型时,您需要 显式处理自定义对象或自定义图层(CTRL+f 处理自定义图层 的文档):

 import tensorflow as tf
import keras
model = keras.models.load_model('my_model.h5', custom_objects={'tf': tf})

原文由 sdcbr 发布,翻译遵循 CC BY-SA 4.0 许可协议

它也发生在我身上。您需要在 lambda 函数中导入 tensorflow。所以你可能想把代码放在一个单独的函数中:

 def reduce_mean(x):
    import tensorflow as tf
    return tf.reduce_mean(x, axis=1)

model = Sequential()
model.add(Embedding(vocab_size, 300, weights=[embedding_matrix], input_length=max_length, trainable=False))
model.add(Lambda(reduce_mean))
model.add(Dense(8, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X_train_pad, y_train, batch_size=128, epochs=25, validation_data=(X_val_pad, y_val), verbose=2)
model.save('my_model.h5')

原文由 Daniel GL 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题