使用 protobuf,如何从已解析的对象中删除字段?
Using protobuf, how to remove a field from a parsed object?
我已成功将原型缓冲区解析到我的对象中,并且可以显示或修改我的字段:
print "convolution param = " + str(net.layer[1].convolution_param)
net.layer[1].convolution_param.num_output = 0
returns
convolution param = num_output: 64
pad: 1
kernel_size: 3
但是,我正在尝试完全删除 convolution_param 但不能:
del net.layer[1].convolution_param
returns
del net.layer[1].convolution_param
TypeError: Can't set composite field
我相信这就是在原库的 source 中触发此错误的原因:
int SetAttr(CMessage* self, PyObject* name, PyObject* value) {
if (PyDict_Contains(self->composite_fields, name)) {
PyErr_SetString(PyExc_TypeError, "Can't set composite field");
return -1;
}
删除字段的规定方法是什么?我也尝试了以下但没有成功:
del net.layer[1].convolution_param.num_output
del net.layer[1].convolution_param[:] = []
我已经取得了成功:
del net.layer[1].convolution_param[:]
删除大括号将导致上述错误。
我已成功将原型缓冲区解析到我的对象中,并且可以显示或修改我的字段:
print "convolution param = " + str(net.layer[1].convolution_param)
net.layer[1].convolution_param.num_output = 0
returns
convolution param = num_output: 64
pad: 1
kernel_size: 3
但是,我正在尝试完全删除 convolution_param 但不能:
del net.layer[1].convolution_param
returns
del net.layer[1].convolution_param
TypeError: Can't set composite field
我相信这就是在原库的 source 中触发此错误的原因:
int SetAttr(CMessage* self, PyObject* name, PyObject* value) {
if (PyDict_Contains(self->composite_fields, name)) {
PyErr_SetString(PyExc_TypeError, "Can't set composite field");
return -1;
}
删除字段的规定方法是什么?我也尝试了以下但没有成功:
del net.layer[1].convolution_param.num_output
del net.layer[1].convolution_param[:] = []
我已经取得了成功:
del net.layer[1].convolution_param[:]
删除大括号将导致上述错误。