Почему MATLAB выдает ошибку при вызове скрипта на python с помощью "from tenorflow import keras"? - PullRequest
1 голос
/ 19 июня 2019

У меня есть следующий скрипт Python (test_from_import.py)

from tensorflow import keras
#import tensorflow.keras
from tensorflow.keras import backend as K

, который я вызываю из MATLAB (R2018a) со следующим кодом:

testDir = '.....' % Directory of 'test_from_import.py'
addpath(testDir)

% Specify Python Executable Directory.
pcPythonExeDir = 'C:\Users\dmattioli\AppData\Local\Programs\Python\Python37\python.exe';
[ver, exec, loaded] = pyversion(pcPythonExeDir);
pyversion % Print to command line.

% Ensure python-matlab integration code is on matlab path.
pyDir = fullfile(matlabroot, 'toolbox', 'matlab', 'external', 'interfaces', 'python');
addpath(pyDir);

% Directory containing all relevant python libraries.
pyLibraryDir = 'C:\Users\dmattioli\AppData\Local\Programs\Python\Python37\Lib\site-packages';

% Add folders to python system path.
insert(py.sys.path, int64(0), testDir);
insert(py.sys.path, int64(0), pyDir);
insert(py.sys.path, int64(0), pyLibraryDir);

%% Call python script.
py_test_mod = py.importlib.import_module('test_from_import')

% % Using system call instead of matlab-python integration functionality.
% [result, status] = python('test_from_import.py') % Does not return error.

Это приводит к сообщению об ошибке(см. в нижней части поста) прослеживание до строки «from tenorflow import keras» вверху.

Эта ошибка не возникает, если / когда вы:

  1. Комментарийв первой строке и раскомментируйте строку import importorflow.keras (затем ошибка переходит на строку «из бэкенда импорта тензорflow.keras как K»).

  2. Выполнить команду »python test_from_import.py "в командной строке или

  3. Выполнить строку системного вызова" [result, status] = ... "вместо строки" py_test_mod = ... "(https://www.mathworks.com/matlabcentral/answers/153867-running-python-script-in-matlab), или

По разным причинам я бы предпочел решить эту проблему, а не использовать одну из этих 3 альтернатив.

Я установил всес использованием pip, при первой установке tenorflow. Версии программного обеспечения (Windows 10):

  1. Python 3.6.8 (та же проблема есть в 3.7.3).
  2. h5py 2.90
  3. Keras 2.2.4
  4. Tensorflow 1.14.0
>> py_test_mod = py.importlib.import_module('test_from_import')
Error using h5r>init h5py.h5r (line 145)
Python Error: AttributeError: type object 'h5py.h5r.Reference' has no attribute '__reduce_cython__'
Error in h5r>init h5py._conv (line 21)
Error in __init__><module> (line 36)
from ._conv import register_converters as _register_converters
Error in saving><module> (line 38)
  import h5py
Error in network><module> (line 40)
from tensorflow.python.keras.engine import saving
Error in training><module> (line 42)
from tensorflow.python.keras.engine.network import Network
Error in multi_gpu_utils><module> (line 22)
from tensorflow.python.keras.engine.training import Model
Error in __init__><module> (line 38)
from tensorflow.python.keras.utils.multi_gpu_utils import multi_gpu_model
Error in advanced_activations><module> (line 27)
from tensorflow.python.keras.utils import tf_utils
Error in __init__><module> (line 29)
from tensorflow.python.keras.layers.advanced_activations import LeakyReLU
Error in __init__><module> (line 26)
from tensorflow.python.keras import layers
Error in __init__><module> (line 25)
from tensorflow.python.keras import applications
Error in __init__><module> (line 82)
from tensorflow.python import keras
Error in __init__><module> (line 24)
from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
Error in test_from_import><module> (line 1)
from tensorflow import keras
Error in <frozen importlib>_call_with_frames_removed (line 219)
Error in <frozen importlib>exec_module (line 728)
Error in <frozen importlib>_load_unlocked (line 677)
Error in <frozen importlib>_find_and_load_unlocked (line 967)
Error in <frozen importlib>_find_and_load (line 983)
Error in <frozen importlib>_gcd_import (line 1006)
Error in __init__>import_module (line 127)
    return _bootstrap._gcd_import(name[level:], package, level)

1 Ответ

0 голосов
/ 25 июня 2019

Согласно этой проблеме в репозитории h5py, проблема заключается в несовместимости версий.Решение, которое работало для нескольких человек, было понижено до h5py v2.8.0.

Установка конкретной версии с использованием pip может быть выполнена в Windows с помощью:

pip install h5py==2.8.0 --force-reinstall

Некоторая дополнительная информацияОб использовании pip в этом контексте можно найти в этом Q & A .

...