Keras 3/TensorFlow 2.16兼容报错及Bug提交渠道咨询
环境版本
- TensorFlow版本:2.16.1
- Keras版本:3.3.3
- tf_keras版本:2.16.0
问题描述
执行训练脚本training_holdout.py时报错,执行命令如下:
export TF_USE_LEGACY_KERAS=1 python3 training_holdout.py
说明:必须设置
export TF_USE_LEGACY_KERAS=1以确保TensorFlow使用Keras 2.*版本来保证兼容性。
脚本运行失败,报错回溯信息如下:
Traceback (most recent call last): File "/media/fernando/B0EA304AEA300EDA/Dados/Fernando/CODE/PESQUISA/programs-tese/SYSTEM-TRAINING/cnn_emotion4/create/training_holdout.py", line 184, in <module> model, target_size = mpp.create_model(model_type=model_type, load_weights=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/media/fernando/B0EA304AEA300EDA/Dados/Fernando/CODE/PESQUISA/programs-tese/SYSTEM-TRAINING/cnn_emotion4/create/../library/BodyEmotion4Lib/lib_model.py", line 58, in create_model modelo = tf.keras.Sequential([ ^^^^^^^^^^^^^^^^^^^^^ File "/home/fernando/.local/lib/python3.12/site-packages/tensorflow/python/trackable/base.py", line 204, in _method_wrapper result = method(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/fernando/.local/lib/python3.12/site-packages/tf_keras/src/utils/traceback_utils.py", line 70, in error_handler raise e.with_traceback(filtered_tb) from None File "/usr/lib/python3.12/random.py", line 336, in randint return self.randrange(a, b+1) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/random.py", line 312, in randrange istop = _index(stop) ^^^^^^^^^^^^ TypeError: 'float' object cannot be interpreted as an integer
报错原因
Python random模块的randint函数被传入浮点数而非整数,而randrange函数要求输入为整数,因此触发TypeError。
解决方案
修改/usr/lib/python3.12/random.py第336行代码:
原代码:
return self.randrange(a, b+1)
修改为:
return self.randrange(int(a), int(b+1))
该修改确保传入randrange的参数为整数,避免触发TypeError。
建议
建议在TensorFlow或Keras代码库的相关部分添加类型检查或强制转换,以处理意外传入浮点数的情况。
疑问
希望将该问题提交至合适的Bug追踪系统,但不确定应提交给TensorFlow、Keras还是Python random模块,烦请告知正确的提交渠道。
内容的提问来源于stack exchange,提问作者Fernando Pujaico Rivera
相关产品推荐
相关产品推荐

