TensorFlow 2.10.0导出ONNX遇Conda包冲突问题求助
问题:安装tf2onnx和onnxruntime后h5py DLL加载失败,保留TensorFlow 2.10.0解决ONNX导出问题
环境创建流程
我通过以下步骤创建Conda环境并完成MNIST模型训练:
conda create --name tf210 python=3.8 conda activate tf210 conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0 pip install tensorflow-gpu==2.10.0 keras==2.10.0 pip install opencv-python==4.4.0.44 pillow==8.2 numpy==1.22 matplotlib scipy pandas scikit-learn tqdm imutils PyYAML tensorboard seaborn protobuf==3.20 chardet pip install tensorflow-datasets==4.6.0 conda install ipykernel python -m ipykernel install --user --name=tf210 --display-name="tf210" conda install -c conda-forge widgetsnbextension ipywidgets
报错详情
安装tf2onnx和onnxruntime后,代码运行出现如下错误:
Traceback (most recent call last): File "F:\pythonProject\main.py", line 3, in <module> import tensorflow_datasets as tfds File "D:\Anaconda\envs\tf210\lib\site-packages\tensorflow_datasets\__init__.py", line 52, in <module> from tensorflow_datasets import image File "D:\Anaconda\envs\tf210\lib\site-packages\tensorflow_datasets\image\__init__.py", line 43, in <module> from tensorflow_datasets.image.dsprites import Dsprites File "D:\Anaconda\envs\tf210\lib\site-packages\tensorflow_datasets\image\dsprites.py", line 23, in <module> import h5py File "D:\Anaconda\envs\tf210\lib\site-packages\h5py\__init__.py", line 26, in <module> from . import _errors ImportError: DLL load failed while importing _errors:The specified program cannot be found.
已知条件与需求
- protobuf 3.20.x与tensorflow-gpu 2.10.0、tensorboard 2.14.0适配正常
- 需保留tensorflow-gpu 2.10.0,解决当前报错并完成ONNX模型导出
解决方案
1. 修复h5py依赖问题
报错根源是pip安装的h5py与Conda环境系统库不兼容,导致DLL缺失。执行以下步骤替换h5py版本:
# 卸载当前pip安装的h5py pip uninstall -y h5py # 用conda安装适配Conda环境的h5py版本(选择与Python3.8、TF2.10兼容的3.7.0版本) conda install -c conda-forge h5py=3.7.0
2. 安装适配TF2.10的tf2onnx与onnxruntime
选择与TensorFlow 2.10.0兼容的版本,避免版本冲突:
# 安装适配TF2.10的tf2onnx pip install tf2onnx==1.14.0 # 若需GPU加速,安装onnxruntime-gpu;否则安装onnxruntime pip install onnxruntime-gpu==1.14.0 # CPU版本替代命令:pip install onnxruntime==1.14.0
3. 验证与测试
- 先验证
tensorflow_datasets导入是否正常:
import tensorflow_datasets as tfds print("tfds imported successfully")
- 再测试模型导出ONNX的流程,示例代码:
import tensorflow as tf from tf2onnx import convert # 加载已训练的MNIST模型 model = tf.keras.models.load_model("mnist_model.h5") # 转换为ONNX格式 spec = (tf.TensorSpec((None, 28, 28, 1), tf.float32, name="input"),) output_path = "mnist_model.onnx" convert.from_keras(model, input_signature=spec, output_path=output_path) print(f"Model exported to {output_path}")
内容的提问来源于stack exchange,提问作者Felix Ye
相关产品推荐
相关产品推荐

