holub008 / robopico

Entity recognition in clinical publication abstracts
GNU General Public License v3.0
3 stars 0 forks source link

Upgrade to tensorflow 2 #1

Open holub008 opened 4 years ago

holub008 commented 4 years ago

Unclear if tensorflow will support v1 as python versions progress, but best not to find out.

holub008 commented 4 years ago

worth noting that (currently, at least) tensorflow needs to be version 2.2 or higher to run on python 3.8 (via pypi distribution)

https://www.tensorflow.org/install/pip

holub008 commented 4 years ago

After a bit of hacking around, I am not tensorflow-capable. Here are the things I tried:

import tensorflow as tf
import os

from ml.ner.ner_model import NERModel
from ml.ner.ner_config import Config
import data as rpd

config = Config()
m = NERModel(config)
m.build()

m.restore_session(os.path.join(rpd.DATA_ROOT, "pico_spans/model.weights/"))

inputs = {
    "word_ids": m.word_ids,
    "sequence_lengths": m.sequence_lengths,
    "char_ids": m.char_ids,
    "word_lengths": m.word_lengths,
    "dropout": m.dropout,
}

outputs = {
    "logits": m.logits,
    "trans_params": m.trans_params,
}
tf.compat.v1.enable_resource_variables()
tf.compat.v1.saved_model.simple_save(m.sess, '/Users/kholub/robopico_savedmodel', inputs, outputs)

Then, when I m = tf.saved_model.load('/Users/kholub/robopico_savedmodel') in v2, got the following:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py", line 578, in load
    return load_internal(export_dir, tags)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load.py", line 613, in load_internal
    root = load_v1_in_v2.load(export_dir, tags)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 263, in load
    return loader.load(tags=tags)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 246, in load
    signature_functions = self._extract_signatures(wrapped, meta_graph_def)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/saved_model/load_v1_in_v2.py", line 158, in _extract_signatures
    signature_fn = wrapped.prune(feeds=feeds, fetches=fetches)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/wrap_function.py", line 358, in prune
    pruned_graph, variable_holder=self._variable_holder)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/wrap_function.py", line 230, in __init__
    fn_graph, attrs=attrs, signature=signature)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 1565, in __init__
    func_graph, self._attrs, self._garbage_collector)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 654, in __init__
    self._func_graph.inputs, self._func_graph.outputs, attrs)
  File "/Users/kholub/rp2/.venv/lib/python3.7/site-packages/tensorflow/python/eager/function.py", line 496, in __init__
    compat.as_str(""))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Output 0 of node 'transitions' has a reference type float_ref
    Encountered while creating function '__inference_pruned_2293'

Without actually digging into tf, I can't do much more here. I will see about adding a dockerfile to at least make deploys with older version easier.

holub008 commented 4 years ago

I've added a python 3.7 version requirement back. This is the latest version of python which tensorflow v1 is supported for. Note that continued support for both of these versions has an expiry (and may already be expired for tf).