Keras模型层中的TensorFlow:“ FailedPreconditionError:表未初始化”

时间:2019-09-15 22:46:21

标签: python tensorflow keras

我正在尝试添加具有训练有素的Keras分类模型的LookupTable作为最终层。我的模型基本上预测了一个标签和一个分数,我希望将其转换为另一个值。

  • 高级代码:
def my_func(x):
    import tensorflow as tf

    keys = tf.constant([0, 1, 2, 3, 4], dtype=tf.int32)
    values = tf.constant([676754, 425362, 918376, 152678], dtype=tf.float32)

    init = tf.lookup.KeyValueTensorInitializer(keys, values)
    table = tf.lookup.StaticHashTable(init, -1)
    init.initialize(table)

    label_tensor = tf.cast(x[:, :, 1], tf.int32)
    score_tensor = x[:, :, 2]

    result = table.lookup(label_tensor)
    return tf.concat((tf.reshape(result, (-1, 2, 1)), tf.reshape(score_tensor, (-1, 2, 1))), axis=1)

new_layer = layers.Lambda(my_func)(model.output)
new_model = Model(inputs=model.input, outputs=new_layer)

FailedPreconditionError: Table not initialized我遇到错误:

---------------------------------------------------------------------------
FailedPreconditionError                   Traceback (most recent call last)
<ipython-input-111-7598eb4fb2fb> in <module>
      1 
      2 
----> 3 predictions = new_model.predict(pad_sequences(encoded_data, maxlen=15, padding='post'))

~/anaconda3/lib/python3.6/site-packages/keras/engine/training.py in predict(self, x, batch_size, verbose, steps)
   1167                                             batch_size=batch_size,
   1168                                             verbose=verbose,
-> 1169                                             steps=steps)
   1170 
   1171     def train_on_batch(self, x, y,

~/anaconda3/lib/python3.6/site-packages/keras/engine/training_arrays.py in predict_loop(model, f, ins, batch_size, verbose, steps)
    292                 ins_batch[i] = ins_batch[i].toarray()
    293 
--> 294             batch_outs = f(ins_batch)
    295             batch_outs = to_list(batch_outs)
    296             if batch_index == 0:

~/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in __call__(self, inputs)
   2713                 return self._legacy_call(inputs)
   2714 
-> 2715             return self._call(inputs)
   2716         else:
   2717             if py_any(is_tensor(x) for x in inputs):

~/anaconda3/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py in _call(self, inputs)
   2673             fetched = self._callable_fn(*array_vals, run_metadata=self.run_metadata)
   2674         else:
-> 2675             fetched = self._callable_fn(*array_vals)
   2676         return fetched[:len(self.outputs)]
   2677 

~/anaconda3/lib/python3.6/site-packages/tensorflow/python/client/session.py in __call__(self, *args, **kwargs)
   1456         ret = tf_session.TF_SessionRunCallable(self._session._session,
   1457                                                self._handle, args,
-> 1458                                                run_metadata_ptr)
   1459         if run_metadata:
   1460           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError: Table not initialized.
     [[{{node new_model.lambda.LookupTableFindV2}}]]

我尝试过的事情:

  • 我也尝试过使用init.initialize(table)
  • ,而不是使用tf.tables_initializer()

1 个答案:

答案 0 :(得分:0)

已解决:

  • 您必须在model.predict()
  • 之前初始化lambda函数之外的所有表。
  • 您还可以从lambda函数中删除 init.initialize(table)
K.get_session().run(tf.tables_initializer(name='init_all_tables'))
new_model.predict(input)
相关问题