tensorflow - 为什么我的 ONNX 模型从 PyTorch 转换后输入为 0?
问题描述
我希望使用此处的教程使用 ONNX 作为中间格式将 PyTorch 模型转换为 Tensorflow 。但是,转换后,当我运行
output =[node.name for node in model.graph.output]
input_all = [node.name for node in model.graph.input]
input_initializer = [node.name for node in model.graph.initializer]
net_feed_input = list(set(input_all) - set(input_initializer))
print('Inputs: ', net_feed_input)
print('Outputs: ', output)
它说输入为零。这是模型架构
class Model(nn.Module):
def __init__(self):
super().__init__()
self.hidden_x1 = nn.Sequential(
nn.Conv1d(in_channels=2, out_channels=8, kernel_size=7),
nn.SELU(),
nn.Conv1d(in_channels=8, out_channels=6, kernel_size=7),
nn.SELU(),
nn.Conv1d(in_channels=6, out_channels=4, kernel_size=5),
nn.SELU(),
)
self.hidden_xfc = nn.Sequential(
nn.Linear(256, 20),
nn.SELU(),
nn.Linear(20, 20),
nn.SELU(),
)
self.hidden_x2 = nn.Sequential(
nn.MaxPool1d(kernel_size=2),
nn.Conv1d(in_channels=2, out_channels=4, kernel_size=5),
nn.SELU(),
nn.Conv1d(in_channels=4, out_channels=4, kernel_size=5),
nn.SELU(),
nn.Conv1d(in_channels=4, out_channels=4, kernel_size=5),
nn.SELU(),
nn.Conv1d(in_channels=4, out_channels=4, kernel_size=5),
nn.SELU(),
nn.Conv1d(in_channels=4, out_channels=4, kernel_size=5),
nn.SELU(),
nn.Conv1d(in_channels=4, out_channels=4, kernel_size=5),
nn.SELU(),
nn.AvgPool1d(kernel_size=2),
nn.Conv1d(in_channels=4, out_channels=2, kernel_size=3),
nn.SELU(),
nn.AvgPool1d(kernel_size=2),
nn.Conv1d(in_channels=2, out_channels=2, kernel_size=3),
nn.SELU(),
nn.AvgPool1d(kernel_size=2),
)
self.hidden_encoded_1 = nn.Flatten()
self.hidden_embedding = nn.Sequential(
nn.Linear(26, 16),
nn.SELU(),
nn.Linear(16, 8),
nn.SELU(),
nn.Linear(8, 4),
)
def forward(self, x, n=-1):
x = torch.transpose(x, 1, 2)
x = self.hidden_x1(x)
xfc = torch.reshape(x, (n, 256))
xfc = self.hidden_xfc(xfc)
x = torch.reshape(x, (n, 2, 128))
x = self.hidden_x2(x)
encoded = self.hidden_encoded_1(x)
encoded = torch.cat((encoded, xfc), 1)
embedding = self.hidden_embedding(encoded)
unscaled_param = embedding*torch.tensor(params_scaler.var_[0:4]**0.5).cuda() + torch.tensor(params_scaler.mean_[0:4]).cuda()
return unscaled_param
我在做的时候传入这个随机输入torch.onnx.export(trained_model, dummy_input, "output/trained_model.onnx")
dummy_input = Variable(torch.randn(20,80,2))
dummy_input = dummy_input.type(torch.cuda.DoubleTensor)
在转换 ONNX 模型 TensorFlow 后,它还说输入也为零。有谁知道我可能做错了什么?
解决方案
推荐阅读
- javascript - 当新的右元素完全可见时,滚动添加一个新类
- python - PySimpleGUI - 更新列表项
- android - Android 应用程序:为什么我的更新密码不起作用?
- javascript - 收集和汇总值(在多个 IIFE 中导航的麻烦)
- xcode - 如何使用 GitHub Actions 安装私有 Pod?
- javascript - 将假光标放在页面图层顶部的问题
- ajax - 如何比较两个 SharePoint 列表并返回匹配的列表项
- hash - 用时间换空间
- kubernetes - Minikube 错误指出未找到绑定的 pvc
- javascript - 每次从指定索引单击时从另一个数组复制一个数组