python - 我可以仅使用 .pth 文件复制和运行其他人的模型吗?
问题描述
我试图准确了解 .pth 文件是什么以及如何使用它们来测试和运行其他人的模型。
例如,查看这样的存储库:https ://github.com/TencentYoutuResearch/PedestrianDetection-NohNMS
我是否可以下载 .pth 文件并从中创建一个执行/计算相同的 Keras 模型?
我在想而不是下载并尝试编译上面的整个存储库,如果我只想测试他们的模型,也许我可以下载他们的 .pth 文件并执行类似“my_model = keras.model(pth_file)”之类的操作,你会得到这个想法。
解决方案
似乎https://github.com/gmalivenko/pytorch2keras库可以满足您的需求。
在自述文件中,他们也有一个例子来做到这一点。
它是 PyTorch 图到 Keras(Tensorflow 后端)模型的转换器。首先,我们需要加载(或创建)一个有效的 PyTorch 模型:
class TestConv2d(nn.Module):
"""
Module for Conv2d testing
"""
def __init__(self, inp=10, out=16, kernel_size=3):
super(TestConv2d, self).__init__()
self.conv2d = nn.Conv2d(inp, out, stride=1, kernel_size=kernel_size, bias=True)
def forward(self, x):
x = self.conv2d(x)
return x
model = TestConv2d()
# load weights here
# model.load_state_dict(torch.load(path_to_weights.pth))
下一步 - 创建一个具有正确形状的虚拟变量:
input_np = np.random.uniform(0, 1, (1, 10, 32, 32))
input_var = Variable(torch.FloatTensor(input_np))
我们使用虚拟变量来跟踪模型(使用 jit.trace):
from pytorch2keras import pytorch_to_keras
# we should specify shape of the input tensor
k_model = pytorch_to_keras(model, input_var, [(10, 32, 32,)], verbose=True)
您还可以将 H 和 W 尺寸设置为 None 以使您的模型与形状无关(例如,完全卷积网络):
from pytorch2keras.converter import pytorch_to_keras
# we should specify shape of the input tensor
k_model = pytorch_to_keras(model, input_var, [(10, None, None,)], verbose=True)
就这样!如果所有模块都正确转换,Keras 模型将存储在 k_model 变量中。
但这只有在所有层都受支持的情况下才有效,您可以在文档中找到列表。
推荐阅读
- templates - 在 Kendo 模板中渲染 HTML
- ruby-on-rails - Rails 5 加入过滤器关联
- nginx - nginx.conf 忽略了 nginx-ingress 配置映射片段
- group-by - sas中每个不同观察的平均___?
- matlab - .mat 文件不在脚本中打开
- vb.net - Socket IO 2.0 不会从 VB.NET windows 服务连接
- typescript - 高阶装饰器功能的打字稿签名
- scala - 火花换行号
- javascript - 在 react/redux 中,在 store prop 上调用 map() 会编辑 store 本身中的 prop
- r - 在 R 编程语言中使用 DTW 作为距离度量来实现 Knn