Как использовать предварительно подготовленную модель, сохраненную в виде файла .npy?

#numpy #tensorflow

#numpy #тензорный поток

Вопрос:

Я пытаюсь загрузить и использовать предварительно подготовленную модель на некоторых образцах изображений, чтобы узнать о ней больше. Предварительно подготовленная модель, которую я пытаюсь использовать, находится здесь: https://github.com/nikhilmaram/Show_and_Tell

Они ссылаются на предварительно подготовленную модель здесь: https://ucsb.box.com/s/vqcxockfzoxfqltrg4l619x1cfvnskog Но они точно не указывают, как лучше всего его использовать.

Который при загрузке представляет собой файл .npy, содержащий, как я полагаю, веса модели. Я никогда раньше не использовал что-то подобное, поэтому я пытаюсь понять, как я могу загрузить такую сохраненную модель в модель тензорного потока, которую я могу затем использовать? Я делаю некоторые предположения, поскольку, похоже, они используют tensorflow. Попытался загрузить, используя приведенное ниже, чтобы хотя бы понять, с какой структурой данных я имею дело, но безуспешно.

 import numpy as np

np.load('Documents/39999.npy')

ValueError: Object arrays cannot be loaded when allow_pickle=False
  

Редактировать: как указано в комментариях, я могу загрузить файл с помощью np.load, как показано ниже, но я все еще не уверен, как взять массив весов numpy и загрузить в tensorflow.

 import numpy as np

data = np.load('Documents/39999.npy',allow_pickle=True)
  

Глядя на структуру этого файла, я получаю следующее, которое я не совсем уверен, как интерпретировать.

 data.dtype
Out[24]: dtype('O')

data.shape
Out[25]: ()
  

Редактировать 2:

 type(data)
Out[6]: numpy.ndarray
  

Когда я делаю data.item() Я получаю распечатанный длинный массив, пример ниже.

 [[-5.75947622e-03,  4.07667161e-04, -5.18753566e-03, ...,
    8.14088504e-04, -4.34151705e-04,  1.14657767e-02],
  [ 4.41048900e-03, -3.57159856e-03,  3.01857502e-03, ...,
   -3.98184508e-02,  1.49278138e-02, -8.20163079e-03],
  [-2.44483184e-02,  2.32945569e-02, -2.34904625e-02, ...,
   -1.79554094e-02, -3.21781076e-02,  1.07798241e-02],
  ...,
  [ 5.12963720e-03,  2.35215593e-02, -3.53378877e-02, ...,
    3.48278917e-02, -2.01826524e-02,  2.35197158e-03],
  [ 3.45730968e-03, -1.26461498e-02,  1.03930170e-02, ...,
   -3.20292413e-02, -6.37839548e-04, -7.48459855e-03],
  [ 3.67492763e-03,  6.75461590e-02,  9.46969260e-03, ...,
    4.72220499e-03,  4.39464301e-02,  6.21765293e-03]]]],
  

dtype=float32)}

Комментарии:

1. Вы пробовали data = np.load('Doc...npy', allow_pickle=True) ? Если это работает, вы можете, по крайней мере, изучить data массив. Начните с проверки data.dtype и data.shape . Тем не менее, это будут просто данные или параметры (веса), а не функция или код, которые вы можете подключить и запустить.

2. Это позволяет мне загружать файл, по крайней мере, так что это хорошо. Я также понимаю, что это будут веса, которые мне нужно каким-то образом преобразовать в модель tf, что является моей конечной целью. Некоторые странные результаты, когда я делаю data.dtype, я получаю dtype(‘O’), а когда я делаю data.shape, я получаю ()

3. Это одноэлементный массив объектов dtype. Вы можете получить доступ к этому элементу с data.item() помощью . Я не знаю, что это будет. Когда вы сохраняете не-numpy-массив с np.save помощью , он сначала оборачивает его в такой массив и использует pickle в не-numpy-частях.

4. @user2355903 — можете ли вы обновить свой вопрос с помощью содержимого и type() of data.item() ?

5. @jakub Я обновил вопрос с этими результатами.