FailedPreconditionError: Ошибка при чтении модуля переменной ресурса / bilm / CNN_proj / W_proj из контейнера: localhost - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь использовать предварительно обученные вложения elmo в блокнот jupyter с python 3.7. Версия Tensorflow - 1.14.0

Это мой код

def ElmoEmbeddingLayer(x):
    print(x.shape)
    module = hub.Module("https://tfhub.dev/google/elmo/3", trainable=False)
    embeddings = module(tf.squeeze(tf.cast(x, tf.string)), signature="default", as_dict=True)["elmo"]
    return embeddings
elmo_dim=1024
elmo_input = Input(shape=(None,), dtype=tf.string)
elmo_embedding = Lambda(ElmoEmbeddingLayer, output_shape=(None,elmo_dim))(elmo_input)
x = Dense(1)(elmo_embedding)
x = Activation('relu')(x)
model = Model(inputs=[elmo_input], outputs=x)
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1,validation_data=(x_test, y_test))

Однако я получаю ошибку времени выполнения, которая

FailedPreconditionError: Ошибка при чтении ресурса переменный модуль / bilm / CNN_proj / W_proj из контейнера: localhost. Это может означать, что переменная была неинициализирована. Не найдено: ресурс localhost / module / bilm / CNN_proj / W_proj / N10tensorflow3VarE не существует. [[{{узел лямбда / module_apply_default / bilm / MatMul_9 / ReadVariableOp}}]]

1 Ответ

0 голосов
/ 27 февраля 2020

Чтобы использовать модели из TF Hub при создании модели Keras, используйте класс hub.KerasLayer. Он реализует способ Keras сбора переменных для инициализации. С tenorflow_hub 0.7.0 (и, предпочтительно, тензор потока 1.15), вы также можете использовать его для более старых модулей TF Hub (например, https://tfhub.dev/google/elmo/3 в вашем примере), с учетом некоторых предостережений, см. tenorflow. org / hub /igration_tf2

Для контекста: более старый класс hub.Module предназначен для построения моделей классическим способом c TF1 (например, tf.layers). Он реализует старый способ сбора переменных для инициализации через коллекцию GLOBAL_VARIABLES tf.Graph. Это пропущено в вашем случае. (Вы можете попытаться инициализировать их вручную в сеансе, возвращаемом tf.compat.v1.keras.backend.get_session(), но это странно.)

...