我正在尝试添加具有训练有素的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()
答案 0 :(得分:0)
已解决:
model.predict()
K.get_session().run(tf.tables_initializer(name='init_all_tables'))
new_model.predict(input)