Numpy загрузка с `allow_pickle = true` старым` keras` в `tenorflow.keras` - PullRequest
0 голосов
/ 12 февраля 2020

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
  • Другая похожая проблема и решение, я не до конца понимаю, можно найти здесь .
  • Насколько я понимаю принятое там решение не применимо.
...