上下文
我在一个个人项目中使用tf.keras,我需要检索一个预先训练过的Alexnet模型。不幸的是,该模型不能仅使用tf.keras直接访问,因此我使用PyTorch下载了经过预先训练的模型,将其转换为onnx文件,然后用以下代码将其导出为.pb文件:
torch_pretrained = torchvision.models.alexnet()
torch_pretrained.load_state_dict(torch.load("alexnet.pth"))
dummy_input = Variable(torch.randn(1, 3, 224, 224))
torch.onnx.export(torch_pretrained, dummy_input, "alexnet_pretrained.onnx")
onnx_pretrained = onnx.load("alexnet_pretrained.onnx")
onnx_pretrained = prepare(onnx_pretrained)
onnx_pretrained.export_graph('alexnet')问题
现在,我正尝试使用keras检索.pb文件,并使用以下代码解释这里:
model = tf.keras.models.load_model("alexnet")
model.summary()我得到了一个错误:
AttributeError:'_UserObject‘对象没有属性’汇总‘
我在加载模型时也会收到警告,但我认为这与此无关:
警告:tensorflow:在加载Keras模型时检测到TF 2.5之前保存了保存模型。请确保使用model.save()或tf.keras.models.save_model()保存模型,而不是使用tf.saved_model.save()。要确认,在keras_metadata.pb目录中应该有一个名为“SavedModel”的文件。
如您所见,加载的模型有一个非常模糊的类型:
在我做研究的时候,我发现了这,这意味着我不是唯一一个面临这个问题的人。
问题
最简单的方法是解决这个特定的问题,但是如果有人知道另一种方法将预训练的Alexnet模型加载到tf.keras,这也将解决我的实际问题。
规格
Windows 10
python 3.9.7
tensorflow 2.6.0
torch 1.10.2
torchvision 0.11.3
onnx 1.10.2
onnx-tf 1.9.0发布于 2022-02-13 17:01:44
解决方案
我遵循了Jakub的建议:我安装了"pytorch2keras“(参见这)。我只是运行了一个函数,直接将py手电模型转换成一个keras模型,它实际上起作用了。
我只需要修改模块的代码,因为出现了一些依赖项问题(它们使用的是onnx.optimizer,现在称为onnxoptimizer),所以我只在以下几个方面更改了导入行:
从…
from onnx import optimizer至
import onnxoptimizer as optimizerhttps://stackoverflow.com/questions/71101993
复制相似问题