Не могу загрузить HDF5 в Python - PullRequest
0 голосов
/ 09 ноября 2019

Я следую этому уроку: https://github.com/fastai/fastai/tree/master/courses/dl2/imdb_scripts

Я скачал предварительно обученную модель в части 3b. Я хочу открыть файлы .h5 и посмотреть / использовать веса. Я пытался использовать python для этого, но он не открывается.

Вот код, который я использовал:

import tables
import pandas as pd
filename = “…bwd_wt103.h5”
file = tables.open_file(filename)

Вот ошибка:

OSError: HDF5 error back trace
File “C:\ci\hdf5_1525883595717\work\src\H5F.c”, line 511, in H5Fopen
unable to open file
File “C:\ci\hdf5_1525883595717\work\src\H5Fint.c”, line 1604, in H5F_open
unable to read superblock
File “C:\ci\hdf5_1525883595717\work\src\H5Fsuper.c”, line 413, in H5F__super_read
file signature not found

End of HDF5 error back trace

Unable to open/create file 'C:/Users/Rishabh/Documents/School and Work/Classes/8 
Fall2019/Senior Design/ULMFiT/Wiki Data/wt103/models/bwd_wt103.h5'

Iтакже использовал HDF Group HDF Viewer: https://support.hdfgroup.org/products/java/release/download.html

Но это тоже не сработало. Выдано сообщение об ошибке «Не удалось открыть файл… Неподдерживаемый формат»

Есть ли способ загрузки весов в Python? В конечном итоге я хочу получить доступ к последнему слою LSTMS с накоплением для создания вложений слов.

Заранее спасибо.

1 Ответ

0 голосов
/ 09 ноября 2019

Это потому, что это модель факела. Вы можете загрузить его на свой локальный компьютер, используя torch примерно так:

>>> import torch
>>> filename = "bwd_wt103.h5"
>>> f = torch.load(filename, map_location=torch.device('cpu'))

Теперь давайте рассмотрим его:

>>> type(f)
OrderedDict
>>> len(f.keys())
15
>>> list(f.keys())
['0.encoder.weight',
 '0.encoder_with_dropout.embed.weight',
 '0.rnns.0.module.weight_ih_l0',
 '0.rnns.0.module.bias_ih_l0',
 '0.rnns.0.module.bias_hh_l0',
 '0.rnns.0.module.weight_hh_l0_raw',
 '0.rnns.1.module.weight_ih_l0',
 '0.rnns.1.module.bias_ih_l0',
 '0.rnns.1.module.bias_hh_l0',
 '0.rnns.1.module.weight_hh_l0_raw',
 '0.rnns.2.module.weight_ih_l0',
 '0.rnns.2.module.bias_ih_l0',
 '0.rnns.2.module.bias_hh_l0',
 '0.rnns.2.module.weight_hh_l0_raw',
 '1.decoder.weight']

Вы можете получить доступ к весам 0.rnns.2.module.weight_hh_l0_raw примерно так:

>>> wts = f['0.rnns.2.module.weight_hh_l0_raw']
>>> wts.shape
torch.Size([1600, 400])
...