Not JSON Serializable error tf2.0

本文介绍了解决在将模型转换为TFLite格式时遇到的NotJSONSerializable错误的方法。此错误通常发生在使用tf.keras.activations时,可通过升级到tf nightly build '2.0.0-dev20190802'或手动修改源码来解决。

背景:使用的模型需要转换成tflite,用tf.keras重写后,因为用到了 tf.keras.activations operators 所以在model.save的时候会报错Not JSON Serializable error。应该是类型不支持,造成node json序列化失败。

解决方法:

1. 官方tf nightly build '2.0.0-dev20190802' 版本已经fixed 这个bug.

2. 自己修改源码。修改方法

3. 

tf.keras.layers.Lambd(lambda t: tf.keras.activations.sigmoid(t))(x)

 

Caused by: org.flowable.common.engine.api.FlowableException: Couldn't deserialize object in variable 'formData' at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:154) at org.flowable.variable.service.impl.types.SerializableType.getValue(SerializableType.java:73) at org.flowable.variable.service.impl.persistence.entity.VariableInstanceEntityImpl.getValue(VariableInstanceEntityImpl.java:134) at org.flowable.variable.service.impl.persistence.entity.VariableInitializingList.initializeVariable(VariableInitializingList.java:66) at org.flowable.variable.service.impl.persistence.entity.VariableInitializingList.add(VariableInitializingList.java:41) at org.flowable.variable.service.impl.persistence.entity.VariableInitializingList.add(VariableInitializingList.java:29) at org.apache.ibatis.reflection.wrapper.CollectionWrapper.add(CollectionWrapper.java:93) at org.apache.ibatis.reflection.MetaObject.add(MetaObject.java:158) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.linkObjects(DefaultResultSetHandler.java:1106) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.applyNestedResultMappings(DefaultResultSetHandler.java:955) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:422) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForNestedResultMap(DefaultResultSetHandler.java:910) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:327) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:302) at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:195) at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:65) at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79) at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63) at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325) at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109) at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:89) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151) ... 156 common frames omitted Caused by: org.flowable.common.engine.api.FlowableClassLoadingException: Class not found: com.nbcio.modules.demo.test_demo.entity.TestDemo at org.flowable.common.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:89) at org.flowable.variable.service.impl.types.SerializableType$1.resolveClass(SerializableType.java:197) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1988) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1852) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2186) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1669) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:503) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:461) at org.flowable.variable.service.impl.types.SerializableType.deserialize(SerializableType.java:150) ... 178 common frames omitted Caused by: java.lang.ClassNotFoundException: com.nbcio.modules.demo.test_demo.entity.TestDemo at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:72) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:348) at org.flowable.common.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:328) at org.flowable.common.engine.impl.util.ReflectUtil.loadClass(ReflectUtil.java:70) ... 186 common frames omitted
最新发布
09-05
### **解决 `numpy.ndarray` 不可 JSON 序列化的问题** 当尝试直接使用 `json.dumps()` 序列化 `numpy.ndarray` 时,会报错 `TypeError: Object of type ndarray is not JSON serializable`。这是因为 JSON 标准格式不支持 NumPy 数组,需要先将其转换为 Python 原生类型(如 `list`)。 --- ### **方法 1:使用 `tolist()` 转换后序列化** ```python import numpy as np import json arr = np.array([1, 2, 3, 4, 5]) # 转换为 list 再序列化 json_data = json.dumps(arr.tolist()) print(json_data) # 输出: [1, 2, 3, 4, 5] ``` --- ### **方法 2:自定义 JSON 编码器(推荐处理复杂情况)** 如果数据中包含多种 NumPy 类型(如 `ndarray`、`int32`、`float64` 等),可以自定义 `JSONEncoder`: ```python import numpy as np import json class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.ndarray): return obj.tolist() elif isinstance(obj, (np.int32, np.int64)): return int(obj) elif isinstance(obj, (np.float32, np.float64)): return float(obj) return super().default(obj) arr = np.array([1, 2, 3], dtype=np.int32) json_data = json.dumps({"data": arr}, cls=NumpyEncoder) print(json_data) # 输出: {"data": [1, 2, 3]} ``` --- ### **方法 3:直接转换标量类型** 如果数组是标量(单个值),需先提取再转换: ```python import numpy as np import json value = np.float64(3.14) json_data = json.dumps(float(value)) # 转换为 Python float print(json_data) # 输出: 3.14 ``` --- ### **注意事项** 1. **性能问题**:大型数组转换 `tolist()` 可能较慢,可考虑分批处理。 2. **数据类型丢失**:JSON 不区分 `int32` 和 `int64`,转换后均为普通 `int`。 3. **嵌套结构**:若数据中包含字典或列表嵌套 `ndarray`,需递归处理(方法 2 已覆盖)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值