【发布时间】:2020-07-08 14:18:53
【问题描述】:
我想在 s390x 架构上使用预训练的 MXNet 模型,但它似乎不起作用。这是因为预训练的模型是小端的,而 s390x 是大端的。所以,我尝试使用https://numpy.org/devdocs/reference/generated/numpy.lib.format.html,它既适用于小端也适用于大端。
我发现解决这个问题的一种方法是在 x86 机器上加载模型参数,调用 asnumpy,通过 numpy 保存然后使用 numpy 在 s390x 机器上加载参数并将它们转换为 MXNet。但我不确定如何编码。谁能帮我解决这个问题?
更新
似乎问题不清楚。因此,我添加了一个示例,以更好地解释我想要分 3 步执行的操作 -
- 从 MXNet 加载预先存在的模型,类似这样 -
net = mx.gluon.model_zoo.vision.resnet18_v1(pretrained=True, ctx=mx.cpu())
- 导出模型。以下代码将模型参数保存在 .param 文件中。但是这个 .param 二进制文件有字节序问题。因此,我不想使用 mxnet API 直接保存模型,而是想使用 numpy - https://numpy.org/devdocs/reference/generated/numpy.lib.format.html 保存参数文件。因为使用 numpy,会使二进制文件(.npy)端独立。我不确定如何将 MXNet 模型的参数转换为 numpy 格式并保存。
gluon.contrib.utils.export(net, path="./my_model")
- 加载模型。以下代码从 .param 文件加载模型。
net = gluon.contrib.utils.import(symbol_file="my_model-symbol.json",
param_file="my_model-0000.params",
ctx = 'cpu')
我想使用 numpy 来加载我们在步骤 2 中创建的 .npy 文件,而不是使用 MXNet API 加载。加载 .npy 文件后,我们需要将其转换为 MXNet。所以,我终于可以在 MXNet 中使用模型了。
【问题讨论】:
-
您能否提供一个生成/保存/加载模型(不处理字节序)的最小示例?
-
@Han-KwangNienhuys 我想在 mxnet 中加载一个预先存在的胶子模型。假设我们将模型设为 resnet-50。因此,我想编写将 resnet-50 参数保存为 numpy 文件 (.npy) 的代码。然后我想导入这个 .npy 文件以在另一台机器上使用 resnet-50 模型。我不确定我应该如何在 Python 中编写代码。你能帮我吗?使用 .npy 扩展名将自动解决任何字节序问题。因此,只生成/保存/加载模型的代码可以在不考虑字节序的情况下工作。我无法编写这种方法
-
@Han-KwangNienhuys 我添加了一个示例。如果您需要更多信息,请告诉我。
-
可复制的示例是可以复制粘贴以进行实验的内容,并且可以在不依赖您的私人文件的情况下工作或演示问题。