我有这样一条Python诏书:
{'class_name': 'InputLayer',
'config': {'batch_input_shape': (None, 32),
'dtype': 'float32',
'sparse': False,
'ragged': False,
'name': 'input_5'}}
当我尝试使用json_format
方法将其转换为protobuf消息时,它将config.batch_input_shape
32
的int
数据类型更改为float
32.0
。
用于转换的代码(layer_config
为上述dict
):
import json
from google.protobuf import json_format
from google.protobuf import struct_pb2 as struct
json_format.Parse(json.dumps(layer_config), struct.Struct())
是否有办法避免从int
到float
的类型转换?
我还尝试使用update
方法进行转换,如下所示:
s = Struct()
s.update(layer_config)
而且还转换类型。
1条答案
按热度按时间lhcgjxsq1#
根据最初的研究,由于Python中数字的转换方式,这不是一个相对容易解决的问题
protobufs/well_known_types.py有一个方法
_SetStructValue
,用于类型转换,在处理数字时,我们同时对float
和int
进行类型检查。这里一个可能的解决方案是遍历有效负载对象图,并执行必要的类型转换以了解所需的类型。