【发布时间】:2025-12-12 22:10:01
【问题描述】:
我在 keras 中使用了预训练的 imagenet VGG16 模型,并在顶部添加了我自己的 Dense。 我正在尝试从我训练的模型中保存和加载权重。
我用来保存模型的代码是
import time
start = time.time()
history = model.fit_generator(generator=train_batches,
epochs=epochs,
steps_per_epoch=steps_train,
#callbacks=callbacks_list,
validation_data=valid_batches,
validation_steps=steps_valid,
shuffle=True)
end = time.time()
model.save("modelvgg.npy")
如果这是不正确的方法,或者是否有更好的方法,请告诉我。
但是当我尝试加载它们时,使用这个,
def __init__(self, vgg16_npy_path=None, trainable=True):
if vgg16_npy_path is None:
path = inspect.getfile(Vgg16)
path = os.path.abspath(os.path.join(path, os.pardir))
path = os.path.join(path, "modelvgg.npy")
vgg16_npy_path = path
print(path)
self.data_dict = np.load(vgg16_npy_path, encoding='latin1').item()
self.trainable = trainable
print("npy file loaded")
但我收到此错误:
UnpicklingError Traceback (most recent call last)
~/.local/lib/python3.6/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
446 try:
--> 447 return pickle.load(fid, **pickle_kwargs)
448 except Exception:
UnpicklingError: invalid load key, 'H'.
During handling of the above exception, another exception occurred:
OSError Traceback (most recent call last)
<ipython-input-5-d099900e8f3b> in <module>
46 labels = tf.placeholder(tf.float32, [batch_size, 2])
47
---> 48 vgg = vgg16.Vgg16()
49 model.build(images)
50 cost = (-1) * tf.reduce_sum(tf.multiply(labels, tf.log(model.prob)), axis=1)
~/Bureau/Grad-CAM_final/model/vgg16.py in __init__(self, vgg16_npy_path, trainable)
18 print(path)
19
---> 20 self.data_dict = np.load(vgg16_npy_path, encoding='latin1').item()
21 self.trainable = trainable
22 print("npy file loaded")
~/.local/lib/python3.6/site-packages/numpy/lib/npyio.py in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
448 except Exception:
449 raise IOError(
--> 450 "Failed to interpret file %s as a pickle" % repr(file))
451 finally:
452 if own_fid:
OSError: Failed to interpret file '/home/omri/Bureau/Grad-CAM_final/model/modelvgg.npy' as a pickle
关于我可能做错了什么有什么建议吗?提前谢谢你。
【问题讨论】:
-
Keras 不会以 pickle 或 numpy 格式保存模型,它为此使用 HDF5。
-
@MatiasValdenegro 如何以pickle格式保存,我需要将模型保存在文件.npy中
-
有什么用?你需要对模型做什么?
-
我想在 Grad-CAM 中使用我的模型(我已经训练过),所以我需要文件 .npy 中的模型来加载 Grad-CAM 的代码
-
您在说什么 Grad-CAM 实施?你见过keras-vis这个包吗?它采用任何 keras 模型并提供不同类型的可视化,包括 Grad-CAM。我觉得你有一个 XY 问题。
标签: python keras deep-learning computer-vision