PaddlePaddle / Paddle2ONNX

ONNX Model Exporter for PaddlePaddle
Apache License 2.0
713 stars 166 forks source link

无法在set_value算子中找到fp32_values属性 #1332

Open jiuyuedeyu156 opened 2 months ago

jiuyuedeyu156 commented 2 months ago

paddle模型代码

import paddle
class Net(paddle.nn.Layer):
    def __init__(self):
        super(Net, self).__init__()
    def forward(self, inputs):
        inputs[1,1] = 1
        return inputs
net = Net()
inputs = paddle.to_tensor([[1,2,3], [4,5,6]], dtype=paddle.float32)
y = net(inputs)
paddle.jit.save(net, 'model', input_spec=[inputs])

pdmodel文件

image image

jiuyuedeyu156 commented 2 months ago

找不到inputs[1,1] = 1的有效信息,无论是属性还是输入

jiuyuedeyu156 commented 2 months ago

通过解析pdmodel的方法已经找到有效信息values,然后我将fp32values属性改为values,发现paddle2onnx不支持axis rank > 1的情况

image
Zheng-Bicheng commented 1 month ago

通过解析pdmodel的方法已经找到有效信息values,然后我将fp32values属性改为values,发现paddle2onnx不支持axis rank > 1的情况

这个应该是你自己这边做的限制?Paddle2ONNX有这方面的限制吗?

jiuyuedeyu156 commented 1 month ago

通过解析pdmodel的方法已经找到有效信息values,然后我将fp32values属性改为values,发现paddle2onnx不支持axis rank > 1的情况

这个应该是你自己这边做的限制?Paddle2ONNX有这方面的限制吗?

Paddle2ONNX只支持input[5]=2或者input[1:5]=2这种零维、一维索引赋值,但不支持input[1, 3]=2或者input[1:2, 3:4]=2这种多维度索引赋值

jiuyuedeyu156 commented 1 month ago

当在神经网络中调用input[1, 2]=2时,属性是axes=[0, 1], values=2, dtype=int64, starts=[1, 2], ends=[2,3], 输入是input

Zheng-Bicheng commented 1 month ago

当在神经网络中调用input[1, 2]=2时,属性是axes=[0, 1], values=2, dtype=int64, starts=[1, 2], ends=[2,3], 输入是input

那是不是可以考虑做有限的支持呢?我有点没理解这里是ONNX的限制还是Paddle2ONNX代码的限制

jiuyuedeyu156 commented 1 month ago

我想copy一下torch的代码,但看不懂函数的参数。paddle set_value对应torch input_put这个函数。https://github.com/pytorch/pytorch/blob/499621e7bbd30f9c7600f26a5fba0cf065faad5e/torch/onnx/symbolic_opset11.py#L207