Numpy загрузка с allow_pickle=true
старым keras
в tensorflow.keras
Ситуация
Я прошел курс, где Jupyter-ноутбук с несколькими примерами использования был предоставлен. Чтобы сэкономить время и иметь чистую рабочую среду, я решил использовать Docker -изображение: jupyter/tensorflow-notebook:latest
(см. здесь ).
Это pip list
результаты для соответствующих модулей:
[...]
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.0
[...]
numpy 1.17.5
[...]
tensorflow 2.1.0
[...]
(a) В заголовок загружены следующие модули:
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.optimizers import RMSprop, Adam
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
(b ) Для некоторого примера Tensorflow распознавания di git нам был предоставлен файл, который, очевидно, содержит процесс обучения. Это загружается следующим образом:
history = np.load('history_NN_40_epochs.npy',allow_pickle='TRUE').item()
Проблема
Проблема состоит в том, что руководитель курса не использовал тот же интерфейс keras, который предоставляется в docker -изображении. Хотя я хотел бы использовать модуль tensorflow.keras
вместо того, чтобы загружать другие / старые версии keras.
Исследования выполнены / проверены решения
Теперь я хочу перечислить решения и попытки. пытался разрешить более опытным пользователям находить возможные ранние ловушки.
(a)
Там появляется первая проблема ModuleNotFoundError: No module named 'keras'
, которую я решил, просто изменив импорт на
import tensorflow.keras as keras
from tensorflow.keras.XY import YZ # prefixed with tensorflow.*
...
(также рекомендуется в в этом посте )
(b)
Это бросает ModuleNotFoundError: No module named 'keras'
. Я предполагаю, что это также происходит от другого способа использования keras
. Поэтому я попробовал решение, представленное здесь , где создается пользовательский class RenamingUnpickler(pickle.Unpickler)
.
Используя его так:
[...]
if module == "keras":
renamed_module = "tensorflow.keras"
[...]
не сработало, хотя (та же ошибка ). Это немного другое решение также приводит к той же ошибке.
notes
- Другая похожая проблема и решение, я не до конца понимаю, можно найти здесь .
- Насколько я понимаю принятое там решение не применимо.