Tensorflow: рд░рдирдЯрд╛рдЗрдо рдкрд░: "рд╕рдВрд╕рд╛рдзрди рдЪрд░ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕/рдХрд░реНрдиреЗрд▓ рдХреЛ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ"

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  26рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: tensorflow/tensorflow

рд╡реНрдпрд╡рд╕реНрдерд╛ рдЬрд╛рдирдХрд╛рд░реА

  • рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ TensorFlow рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдЯреЙрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд): рд╣рд╛рдБ, рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛ (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • OS рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рд╡рд┐рддрд░рдг (рдЬреИрд╕реЗ, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • TensorFlow рд╕рдВрд╕реНрдХрд░рдг (рдиреАрдЪреЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ): 2.0.0-alpha0
  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: рдкрд╛рдпрдерди 3.6.5

рдЖрдк рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреИрдкреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд╛рдпрдерди-рд╕реА "tf рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ; рдкреНрд░рд┐рдВрдЯ (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
"flaskApp.py" рдЪрд▓рд╛рддреЗ рд╕рдордп, рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ "рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

tensorflow.python.framework.errors_impl.FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕/рдХрд░реНрдиреЗрд▓ рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/рд╕реЙрдлреНрдЯрдореИрдХреНрд╕/рдХрд░реНрдиреЗрд▓/N10tensorflow3VarE рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб
рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • рдРрдк рдХреЛ flask run
  • рдбрд╛рдХрд┐рдпрд╛ рдпрд╛ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрдк рдкрд░ рдХреБрддреНрддреЗ рдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреА рдХреЛрдИ рднреА рдЫрд╡рд┐ рднреЗрдЬреЗрдВ
    Screenshot 2019-04-30 at 16 10 57
    рдпрд╛
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА / рд▓реЙрдЧ

E0430 13:36:10.374372 123145501933568 app.py:1761] Exception on /net/MobileNet [POST]
Traceback (most recent call last):
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 97, in use_net_to_classify_image
    prediction, prob = predict(net_name, image)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 59, in predict
    output_probability = net_models[cnn_name].predict(post_processed_input_images)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1167, in predict
    callbacks=callbacks)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 352, in model_iteration
    batch_outs = f(ins_batch)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/backend.py", line 3096, in __call__
    run_metadata=self.run_metadata)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1440, in __call__
    run_metadata_ptr)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 548, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable softmax/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/softmax/kernel/N10tensorflow3VarE does not exist.
     [[{{node softmax/MatMul/ReadVariableOp}}]]
TF 2.0 ops awaiting response support

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рд╕рднреА 26 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдпрд╣ рдмрд┐рд▓реНрдб/рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдпрд╛ рдмрдЧ/рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд░реНрдерди рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ Stackoverflow рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВред рдЖрдкрдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдФрд░ рдЙрдирд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп рд╣реИред рдЧрд┐рдЯрд╣рдм рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрдЧ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░ рдлреНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг 1.13.1 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВ рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ some_custom_config рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рдерд╛?

рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВ рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ some_custom_config рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рдерд╛?

рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕рддреНрд░ (рдЬреЛ рдореБрдЭреЗ рдХрд░рдирд╛ рдерд╛) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░рдирд╛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЛред

рдореБрдЭреЗ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖ рд░рд╣реА рд╣реИрдВ рдФрд░ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ some_custom_config рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рдерд╛?

рдпрджрд┐ рдЖрдк рдЕрдкрдирд╛ рд╕рддреНрд░ (рдЬреЛ рдореБрдЭреЗ рдХрд░рдирд╛ рдерд╛) рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░рдирд╛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЛред

рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдЕрдм рд╕рдм рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреЗрд░рд╛ рдкрд░ рдмреАрдИрдЖрд░рдЯреА рдЪрд▓рд╛рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ!

```рдЕрд╕рдлрд▓ рдкреВрд░реНрд╡ рд╢рд░реНрдд рддреНрд░реБрдЯрд┐ рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреА рдХреЙрд▓ рдЕрдВрддрд┐рдо)
рдореЗрдВ()
11 рд╕рддреНрдпрд╛рдкрди_рдбреЗрдЯрд╛ = ([test_input_ids, test_input_masks, test_segment_ids], test_labels),
12 рдпреБрдЧ = 1,
---> 13 рдмреИрдЪ_рд╕рд╛рдЗрдЬ = 32
14)

3 рдлреНрд░реЗрдо
/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py рдореЗрдВ __call__(self, args, * kwargs)
1456 рд░рд┐рдЯ = tf_session.TF_SessionRunCallable(self._session._session,
1457 рд╕реНрд╡рдпрдВ._рд╣реИрдВрдбрд▓, рдЖрд░реНрдЧ,
-> 1458 рд░рди_рдореЗрдЯрд╛рдбреЗрдЯрд╛_рдкреАрдЯреАрдЖрд░)
1459 рдЕрдЧрд░ рд░рди_рдореЗрдЯрд╛рдбреЗрдЯрд╛:
1460 рдкреНрд░реЛрдЯреЛ_рдбреЗрдЯрд╛ = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ bert_layer_9_module/bert/encoder/layer_3/output/LayerNorm/gamma рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: localhost. рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/рдмрд░реНрдЯ_рд▓реЗрдпрд░_9_рдореЙрдбреНрдпреВрд▓/рдмрд░реНрдЯ/рдПрдирдХреЛрдбрд░/рд▓реЗрдпрд░_3/рдЖрдЙрдЯрдкреБрдЯ/рд▓реЗрдпрд░рдиреЙрд░реНрдо/рдЧрд╛рдорд╛/N10tensorflow3VarE рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
[[{{рдиреЛрдб bert_layer_9/bert_layer_9_module_apply_tokens/bert/encoder/layer_3/output/LayerNorm/batchnorm/mul/ReadVariableOp}}]] ```

рдХрд╕реНрдЯрдо рдХреЗрд░рд╕ рдкрд░рдд рдХреЗ рдЕрдВрджрд░ tf-hub рд╕реЗ рдПрд▓реНрдореЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

tensorflow.python.framework.errors_impl.FailedPreconditionError: 2 рдореВрд▓ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд┐рд▓реАрдВред
(0) рд╡рд┐рдлрд▓ рдкреВрд░реНрд╡ рд╢рд░реНрдд: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry рдкрдврд╝рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
[[{{рдиреЛрдб ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
(1) рд╡рд┐рдлрд▓ рдкреВрд░реНрд╡ рд╢рд░реНрдд: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/ElmoEmbeddingLayer_module/bilm/CNN_high_0/b_carry/class tensorflow::Var рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
[[{{рдиреЛрдб ElmoEmbeddingLayer/ElmoEmbeddingLayer_module_apply_default/bilm/add/ReadVariableOp}}]]
[[рдореИрдЯреНрд░рд┐рдХреНрд╕/рдПрд╕реАрд╕реА/рдкрд╣рдЪрд╛рди/_199]]
0 рд╕рдлрд▓ рд╕рдВрдЪрд╛рд▓рдиред
0 рд╡реНрдпреБрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ред

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛, рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ:

# on thread 1
session = tf.Session(graph=tf.Graph())
with session.graph.as_default():
    k.backend.set_session(session)
    model = k.models.load_model(filepath)

# on thread 2
with session.graph.as_default():
    k.backend.set_session(session)
    model.predict(x, **kwargs)

рдпрд╣рд╛рдВ рдирд╡реАрдирддрд╛ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ (рдПрдХ рдмрд╛рд░) рдФрд░ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд░рд╣реА рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" Session рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" Graph рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдирдП рдмрдирд╛рддреЗ рд╣реИрдВред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Graph рдХреЛ Session рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред
рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдЗрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛, рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИ:

# on thread 1
session = tf.Session(graph=tf.Graph())
with session.graph.as_default():
    k.backend.set_session(session)
    model = k.models.load_model(filepath)

# on thread 2
with session.graph.as_default():
    k.backend.set_session(session)
    model.predict(x, **kwargs)

рдпрд╣рд╛рдВ рдирд╡реАрдирддрд╛ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ (рдПрдХ рдмрд╛рд░) рдФрд░ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд░рд╣реА рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" Session рдФрд░ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" Graph рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрдк рдирдП рдмрдирд╛рддреЗ рд╣реИрдВред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Graph рдХреЛ Session рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдЗрд╕ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, @eliadl рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдзрдиреНрдпрд╡рд╛рдж: рд╕реНрдорд╛рдЗрд▓реА:

рд╡реНрдпрд╡рд╕реНрдерд╛ рдЬрд╛рдирдХрд╛рд░реА

  • рдХреНрдпрд╛ рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ TensorFlow рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╕реНрдЯреЙрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд): рд╣рд╛рдБ, рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛ (https://github.com/viaboxxsystems/deeplearning-showcase/blob/tensorflow_2.0/flaskApp.py)
  • OS рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рд╡рд┐рддрд░рдг (рдЬреИрд╕реЗ, Linux Ubuntu 16.04): MAC OSX 10.14.4
  • TensorFlow рд╕рдВрд╕реНрдХрд░рдг (рдиреАрдЪреЗ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ): 2.0.0-alpha0
  • рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг: рдкрд╛рдпрдерди 3.6.5

рдЖрдк рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреИрдкреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдкрд╛рдпрдерди-рд╕реА "tf рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ; рдкреНрд░рд┐рдВрдЯ (tf.version.GIT_VERSION, tf.version.VERSION)"
v1.12.0-9492-g2c319fb415 2.0.0-alpha0

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
"flaskApp.py" рдЪрд▓рд╛рддреЗ рд╕рдордп, рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ "рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫрд╡рд┐ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

tensorflow.python.framework.errors_impl.FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕/рдХрд░реНрдиреЗрд▓ рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/рд╕реЙрдлреНрдЯрдореИрдХреНрд╕/рдХрд░реНрдиреЗрд▓/N10tensorflow3VarE рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рдЫрд╡рд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб
рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг:

  • git clone https://github.com/viaboxxsystems/deeplearning-showcase.git
  • git checkout tensorflow_2.0
  • (рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) pip3 install -r requirements.txt
  • export FLASK_APP=flaskApp.py
  • рдРрдк рдХреЛ flask run
  • рдбрд╛рдХрд┐рдпрд╛ рдпрд╛ рдХрд░реНрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрдк рдкрд░ рдХреБрддреНрддреЗ рдпрд╛ рдмрд┐рд▓реНрд▓реА рдХреА рдХреЛрдИ рднреА рдЫрд╡рд┐ рднреЗрдЬреЗрдВ
    Screenshot 2019-04-30 at 16 10 57
    рдпрд╛
curl -X POST \
  http://localhost:5000/net/MobileNet \
  -H 'Postman-Token: ea35b79b-b34d-4be1-a80c-505c104050ec' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F image=@/Users/haitham.b/Projects/ResearchProjects/CNNs/deeplearning-showcase/data/sample/valid/dogs/dog.1008.jpg

рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА / рд▓реЙрдЧ

E0430 13:36:10.374372 123145501933568 app.py:1761] Exception on /net/MobileNet [POST]
Traceback (most recent call last):
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 97, in use_net_to_classify_image
    prediction, prob = predict(net_name, image)
  File "/Users/haitham.b/Projects/Virtualenvs/deeplearning-showcase/flaskApp.py", line 59, in predict
    output_probability = net_models[cnn_name].predict(post_processed_input_images)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py", line 1167, in predict
    callbacks=callbacks)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 352, in model_iteration
    batch_outs = f(ins_batch)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/keras/backend.py", line 3096, in __call__
    run_metadata=self.run_metadata)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/client/session.py", line 1440, in __call__
    run_metadata_ptr)
  File "/Users/haitham.b/venv/tensorflow2.0alpha/lib/python3.6/site-packages/tensorflow/python/framework/errors_impl.py", line 548, in __exit__
    c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.FailedPreconditionError: Error while reading resource variable softmax/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/softmax/kernel/N10tensorflow3VarE does not exist.
   [[{{node softmax/MatMul/ReadVariableOp}}]]

рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
tensorflow.python.framework.errors_impl.FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ рд╕рдШрди_6/рдХрд░реНрдиреЗрд▓ рдкрдврд╝рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди localhost/dense_6/kernel/class tensorflow::Var рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
[[{{рдиреЛрдб рд╕рдШрди_6/MatMul/ReadVariableOp}}]]

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдЬрд╡рд╛рдм рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╢рд╛рдпрдж рдпрд╣ рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдХреЗрд░рд╕ рдореЗрдВ VGG16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ iterate funtion рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])
рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реА рдПрдХ рд╕рд╡рд╛рд▓ рд╣реБрдЖред
FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ block1_conv1_12/рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдкрдврд╝рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐: localhost. рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/рдмреНрд▓реЙрдХ1_conv1_12/рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣/N10tensorflow3VarE рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред[[{{рдиреЛрдб block1_conv1_12/BiasAdd/ReadVariableOp}}]]
https://github.com/JarvisUSTC/deep-learning-with-python-notebooks/blob/master/5.4-visualizing-what-convnets-learn.ipynb рдореЗрдВ , рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
image

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model
from tensorflow.python.keras.applications import VGG16

sess = tf.Session()
graph = tf.get_default_graph()

set_session(sess)

#model = load_model('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
model = VGG16(weights='imagenet',include_top=False)

layer_name = 'block3_conv1'
filter_index = 0

layer_output = model.get_layer(layer_name).output
loss = K.mean(layer_output[:, :, :, filter_index])
grads = K.gradients(loss, model.input)[0]
grads /= (K.sqrt(K.mean(K.square(grads))) + 1e-5)

import numpy as np
global sess
global graph
with graph.as_default():
    set_session(sess)
    iterate = K.function([model.input], [loss, grads])
    loss_value, grads_value = iterate([np.zeros((1, 150, 150, 3))])

image

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред
рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░ рдлреНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг 1.13.1 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛ .. рдзрдиреНрдпрд╡рд╛рдж @ eliadl

TF 2.x рдореЗрдВ, рдХреЛрдИ рд╕рддреНрд░ рдирд╣реАрдВ рд╣реИ ()ред рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реВрдВ? рдореЗрд░реЗ TF 2.x рдХреЛрдб рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

рдХреЗ рдмрдЬрд╛рдп @SungmanHong tf.Session рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ tf.compat.v1.Session ред

TF 2.x рдореЗрдВ, рдХреЛрдИ рд╕рддреНрд░ рдирд╣реАрдВ рд╣реИ ()ред рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реВрдВ? рдореЗрд░реЗ TF 2.x рдХреЛрдб рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

TF 2.X . рдореЗрдВ рдЖрдпрд╛рдд рд╕рддреНрд░
tf.compat.v1.Session()
TF 2.X рдореЗрдВ keras.backend.get_session рдЖрдпрд╛рдд рдХрд░реЗрдВ
tf.compat.v1.keras.backend.get_session()

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рдзрдиреНрдпрд╡рд╛рдж

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рдпрд╛рд░ рдЖрдк рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рдФрд░ рднрдпрд╛рдирдХ рд╣реИрдВ, рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╣реЗрдЬрд╛ рд╣реИ, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

TF 2.x рдореЗрдВ, рдХреЛрдИ рд╕рддреНрд░ рдирд╣реАрдВ рд╣реИ ()ред рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реВрдВ? рдореЗрд░реЗ TF 2.x рдХреЛрдб рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред

TF 2.X . рдореЗрдВ рдЖрдпрд╛рдд рд╕рддреНрд░
tf.compat.v1.Session()
TF 2.X рдореЗрдВ keras.backend.get_session рдЖрдпрд╛рдд рдХрд░реЗрдВ
tf.compat.v1.keras.backend.get_session()

рдореИрдВрдиреЗ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ

`` The graph tensor has name: anchors/Variable:0 /usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py:49: UserWarning: Using a generator with use_multiprocessing=True and multiple workers may duplicate your data. Please consider using the keras.utils.Sequence рдХреНрд▓рд╛рд╕ред
UserWarning(' use_multiprocessing=True рд╕рд╛рде рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛'

рдпреБрдЧ 1/4

FailedPreconditionError Traceback (рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХреА рдХреЙрд▓ рдЕрдВрддрд┐рдо)
рдореЗрдВ()
4 Learning_rate=config.LEARNING_RATE,
5 рдпреБрдЧ = 4,
----> 6 рдкрд░рддреЗрдВ = 'рд╕рд┐рд░')

6 рдлреНрд░реЗрдо
/usr/local/lib/python3.6/dist-packages/mrcnn/model.py рдЯреНрд░реЗрди рдореЗрдВ (рд╕реНрд╡рдпрдВ, train_dataset, val_dataset, Learning_rate, рдпреБрдЧ, рдкрд░рддреЗрдВ, рд╡реГрджреНрдзрд┐)
2350 рдореИрдХреНрд╕_рдХреНрдпреВ_рд╕рд╛рдЗрдЬрд╝ = 100,
2351 рд╢реНрд░рдорд┐рдХ = рд╢реНрд░рдорд┐рдХ,
-> 2352 use_multiprocessing=true,
2353 )
2354 рд╕реНрд╡.рдпреБрдЧ = рдЕрдзрд┐рдХрддрдо (рд╕реНрд╡рдпрдВ.рдпреБрдЧ, рдпреБрдЧ)

/usr/рд╕реНрдерд╛рдиреАрдп/lib/python3.6/dist-packages/keras/legacy/interfaces.py рдЖрд╡рд░рдг рдореЗрдВ ( args, * kwargs)
89 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВред рдЪреЗрддрд╛рд╡рдиреА ('рдЕрдкрдирд╛ ' + object_name + ' рдХреЙрд▓ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ' +
90 'рдХреЗрд░рд╕ 2 рдПрдкреАрдЖрдИ:' + рд╕рд┐рдЧреНрдиреЗрдЪрд░, рд╕реНрдЯреИрдХрд▓реЗрд╡рд▓ = 2)
---> 91 рд░рд┐рдЯрд░реНрди func ( args, * kwargs)
92 рд░реИрдкрд░._рдСрд░рд┐рдЬрд┐рдирд▓_рдлрдВрдХреНрд╢рди = func
93 рд╡рд╛рдкрд╕реА рдЖрд╡рд░рдг

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py рдореЗрдВ fit_generator (рд╕реНрд╡рдпрдВ, рдЬрдирд░реЗрдЯрд░, steps_per_epoch, рдпреБрдЧ, рд╡рд░реНрдмреЛрдЬрд╝, рдХреЙрд▓рдмреИрдХ, рд╕рддреНрдпрд╛рдкрди_рдбреЗрдЯрд╛, рд╕рддреНрдпрд╛рдкрди_рд╕реНрдЯреЗрдкреНрд╕, рд╕рддреНрдпрд╛рдкрди_рдлрд╝реНрд░реЗрдХ, рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ, рдореИрдХреНрд╕_рдХреНрдпреВ_рд╕рд╛рдЗрдЬрд╝, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, use_multiprocessing , рдлреЗрд░рдмрджрд▓, рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рдпреБрдЧ)
1730 use_multiprocessing=use_multiprocessing,
1731 рдлреЗрд░рдмрджрд▓ = рдлреЗрд░рдмрджрд▓,
-> 1732 рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рдпреБрдЧ = рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рдпреБрдЧ)
1733
1734 @interfaces.legacy_generator_methods_support

/usr/local/lib/python3.6/dist-packages/keras/engine/training_generator.py рдореЗрдВ fit_generator (рдореЙрдбрд▓, рдЬрдирд░реЗрдЯрд░, steps_per_epoch, рдпреБрдЧ, рд╡рд░реНрдмреЛрдЬрд╝, рдХреЙрд▓рдмреИрдХ, рд╕рддреНрдпрд╛рдкрди_рдбреЗрдЯрд╛, рд╕рддреНрдпрд╛рдкрди_рд╕реНрдЯреЗрдкреНрд╕, рд╕рддреНрдпрд╛рдкрди_рдлрд╝реНрд░реЗрдХ, рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ, max_queue_size, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, use_multiprocessing , рдлреЗрд░рдмрджрд▓, рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рдпреБрдЧ)
218 рд╕реИрдВрдкрд▓_рд╡реЗрдЯ = рд╕реИрдВрдкрд▓_рд╡реЗрдЯ,
219 рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ = рдХреНрд▓рд╛рд╕_рд╡реЗрдЯ,
--> 220 рд░реАрд╕реЗрдЯ_рдореЗрдЯреНрд░рд┐рдХреНрд╕ = рдЧрд▓рдд)
221
222 рдмрд╣рд┐рд╖реНрдХрд╛рд░ = to_list(рдмрд╣рд┐рд╖реНрдХрд╛рд░)

/usr/local/lib/python3.6/dist-packages/keras/engine/training.py intrain_on_batch(self, x, y, sample_weight, class_weight, reset_metrics)
1512 рдЗрдиреНрд╕ = x + y + рдирдореВрдирд╛_рд╡рдЬрди
1513 рд╕реНрд╡._рдореЗрдХ_рдЯреНрд░реЗрди_рдлрдВрдХреНрд╢рди ()
-> 1514 рдЖрдЙрдЯрдкреБрдЯ = self.train_function(ins)
1515
1516 рдЕрдЧрд░ рд░реАрд╕реЗрдЯ_рдореЗрдЯреНрд░рд┐рдХреНрд╕:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py рдореЗрдВ __call__(self, inputs)
3630
3631 рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ = рд╕реНрд╡рдпрдВред_рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп_рдПрдлрдПрди (* array_vals,
-> 3632 run_metadata=self.run_metadata)
3633 рд╕реНрд╡рдпрдВ._call_fetch_callbacks(fetched[-len(self._fetches):])
3634 рдЖрдЙрдЯрдкреБрдЯ_рд╕реНрдЯреНрд░рдХреНрдЪрд░ = Nest.pack_sequence_as(

/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py рдореЗрдВ __call__(self, args, * kwargs)
1470 рд░рд┐рдЯ = tf_session.TF_SessionRunCallable(self._session._session,
1471 рд╕реНрд╡рдпрдВ._рд╣реИрдВрдбрд▓, рдЖрд░реНрдЧ,
-> 1472 рд░рди_рдореЗрдЯрд╛рдбреЗрдЯрд╛_рдкреАрдЯреАрдЖрд░)
1473 рдЕрдЧрд░ рд░рди_рдореЗрдЯрд╛рдбреЗрдЯрд╛:
1474 рдкреНрд░реЛрдЯреЛ_рдбреЗрдЯрд╛ = tf_session.TF_GetBuffer(run_metadata_ptr)

FailedPreconditionError: рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдЪрд░ рдПрдВрдХрд░/рд╡реЗрд░рд┐рдПрдмрд▓ рдкрдврд╝рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐: localhost. рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ рдЕрдкреНрд░рд╛рд░рдВрднреАрдХреГрдд рдерд╛ред рдирд╣реАрдВ рдорд┐рд▓рд╛: рд╕рдВрд╕рд╛рдзрди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ/рдПрдВрдХрд░/рд╡реЗрд░рд┐рдПрдмрд▓/N10tensorflow3VarE рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
[[{{рдиреЛрдб ROI/ReadVariableOp}}]] ```

рдХреГрдкрдпрд╛ рд╕рд╣рд╛рдпрддрд╛ рдХреАрдЬрд┐рдП!!!

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рддреБрдо рдХрдорд╛рд▓ рд╣реЛ!!!!! рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЖрдкрдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рд╕реНрд╡рд╛рдЧрдд рд╣реИ :)ред

рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рд╕рддреНрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП, рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рддреНрд░ (рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рд╡рдЬрди, рдореЙрдбрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ) рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реИрд╢реНрд╡рд┐рдХ рд╕рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдХрд░ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕рднреА рдореЙрдбрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

Pls рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ some_custom_config рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ

Pls рдпрд╣ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ some_custom_config рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ

рдореЗрд░реЗ рдкрд╛рд╕ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ 1.13.1 рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЙрд╕ рд╕рддреНрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

from tensorflow.python.keras.backend import set_session
from tensorflow.python.keras.models import load_model

tf_config = some_custom_config
sess = tf.Session(config=tf_config)
graph = tf.get_default_graph()

# IMPORTANT: models have to be loaded AFTER SETTING THE SESSION for keras! 
# Otherwise, their weights will be unavailable in the threads after the session there has been set
set_session(sess)
model = load_model(...)

рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ (рдпрд╛рдиреА рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдореЗрдВ):

global sess
global graph
with graph.as_default():
    set_session(sess)
    model.predict(...)

рдХрд╛рдо рдореЗрд░реЗ рд▓рд┐рдП рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж !!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

davidbernat picture davidbernat  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kepricon picture kepricon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ilblackdragon picture ilblackdragon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Billy4195 picture Billy4195  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ppwwyyxx picture ppwwyyxx  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ