caffe执行draw.py的错误汇总

本文总结了使用Caffe框架中draw.py文件绘制神经网络拓扑图时遇到的各种错误及其解决办法,包括缺少pydot模块、GraphViz执行文件未找到等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

caffe执行draw.py的错误汇总

发表于2017/5/11 17:18:43  89人阅读

caffe执行draw.py的错误汇总

安装完caffe后,使用caffe时,有时候需要调用draw.py来画整个神经网络拓扑图,不过github上最新版本运行draw.py会报错,具体如下


错误1

执行命令

$cd caffe/python/

$python draw_net.py ../examples/mnist/lenet_train_test.prototxt lenet.png

会报如下错误:

Traceback(most recent call last):

File"draw_net.py", line 9, in <module>

importcaffe.draw

File"/root/caffe/python/caffe/draw.py", line 22, in <module>

import pydot

ImportError:No module named pydot


解决方法,安装pydot

sudo apt-get install python-pydot

或者pip install pydot

再次运行:python draw_net.py ../examples/mnist/lenet_train_test.prototxt lenet.png

又出现错误了:pydot.InvocationException: GraphViz's executables not found,坑爹。此时需要安装graphviz,命令为sudo apt-get install graphviz

最后再运行一次,终于成功了。在python文件夹下得到lenet.png文件了。如下图:

      

错误:

Traceback (most recent call last):
  File "draw_net.py", line 58, in <module>
    main()
  File "draw_net.py", line 54, in main
    phase)
  File "/home/ph/caffe/python/caffe/draw.py", line 244, in draw_net_to_file
    fid.write(draw_net(caffe_net, rankdir, ext, phase))
  File "/home/ph/caffe/python/caffe/draw.py", line 223, in draw_net
    return get_pydot_graph(caffe_net, rankdir, phase=phase).create(format=ext)
  File "/home/ph/anaconda2/lib/python2.7/site-packages/pydot.py", line 1876, in create
    prog=prog))
Exception: "dot" not found in path.


解决方法:sudo apt-get install graphviz  


错误ImportError: No module named google.prototxt

解决方法:

安装python-protobuf

  1. sudo apt-get install Python-protobuf  
sudo apt-get install Python-protobuf


错误3

修复好错误1的情况下,执行

$python draw_net.py ../examples/mnist/lenet_train_test.prototxt lenet.png

会报如下错误:

Traceback(most recent call last):

File"draw_net.py", line 58, in <module>

main()

File"draw_net.py", line 54, in main

phase)

File"/root/caffe/python/caffe/draw.py", line 244, indraw_net_to_file

fid.write(draw_net(caffe_net,rankdir, ext, phase))

File"/root/caffe/python/caffe/draw.py", line 223, in draw_net

returnget_pydot_graph(caffe_net, rankdir, phase=phase).create(format=ext)

File"/root/caffe/python/caffe/draw.py", line 167, inget_pydot_graph

node_label= get_layer_label(layer, rankdir)

File"/root/caffe/python/caffe/draw.py", line 107, inget_layer_label

layer.pooling_param.kernel_size[0]if len(layer.pooling_param.kernel_size._values) else 1,

AttributeError:'int' object has no attribute '_values'


解决方案

github上查找解决方案

https://github.com/BVLC/caffe/releases  找到cold-brew版本,然后下载Source code(zip),解压后将caffe/python/draw_net.py复

制并替换掉原先的draw_net文件即可

这是我下载好的,可直接下载       链接:链接:http://pan.baidu.com/s/1mhCvFmC 密码:5imd

//https://github.com/BVLC/caffe/issues/5324


//文章链接上说是由于caffedraw.py本身错误引起,用老版本的caffedraw.py代替如果从直接github上下载的代码的话,最好

gitpull直接更新代码,git上最新的代码没有问题。

<think>好的,我现在需要解决用户在导入caffe时遇到的ImportError: cannot import name '_validate_lengths'的问题。根据用户提供的引用资料,这个问题似乎和numpy版本以及skimage或caffe的依赖有关。 首先,用户提供的引用[1]中提到,修改skimage的arraycrop.py文件,根据numpy版本导入不同的模块。具体来说,旧版本的numpy(<1.16)使用numpy.lib.arraypad._validate_lengths,而新版本则使用_as_pairs。这说明当numpy升级到1.16及以上时,这个函数的位置或名称可能发生了变化,导致依赖它的库(如skimage或caffe)出现导入错误。 引用[2]和[3]同样指向了类似的问题,可能是在conda安装caffe时出现的。这表明问题可能不仅仅出现在skimage,也可能在caffe的某些依赖中,特别是当这些库依赖于旧版本的numpy结构时。 接下来,我需要考虑用户可能的解决步骤。首先,检查numpy的版本。如果用户使用的是较新的numpy(≥1.16),可能需要调整相关库的导入方式,如引用[1]中的修改arraycrop.py。或者,另一个方法是降级numpy到1.16之前的版本,但这可能不推荐,因为降级可能会影响其他依赖新版本numpy的库。 用户可能已经尝试安装caffe,但遇到了这个问题。需要确定是skimage的问题还是caffe本身的问题。根据引用[2],conda安装的caffe可能依赖旧版numpy的结构,所以解决方案可能需要调整环境中的库版本。 可能的解决方案包括: 1. 修改skimage的arraycrop.py文件,根据numpy版本条件导入正确的模块,如引用[1]所述。 2. 检查caffe的依赖,确认是否需要特定版本的numpy,并尝试安装兼容的版本。 3. 使用虚拟环境来管理依赖,确保所有库的版本兼容。 需要分步骤指导用户操作,同时确保他们理解每一步的作用。此外,用户可能需要更新或重新安装相关库,如skimage或caffe,以确保与当前numpy版本兼容。 最后,需要验证解决方案是否有效。例如,在修改arraycrop.py后,重新运行代码看是否仍然报错。如果问题依然存在,可能需要进一步检查其他依赖或寻求其他方法。</think>针对Python导入caffe时出现的`ImportError: cannot import name '_validate_lengths'`问题,以下是逐步解决方案: --- ### **问题原因** 该错误通常由以下原因引起: 1. **numpy版本不兼容**:新版本numpy(≥1.16)移除了`_validate_lengths`函数,改用`_as_pairs`代替[^1]。 2. **依赖库未适配**:某些库(如`skimage`或`caffe`)仍依赖旧版numpy的接口,导致导入失败。 --- ### **解决方案** #### **方法1:修改`arraycrop.py`文件(推荐)** 1. 定位`arraycrop.py`文件: ```bash sudo find / -name "arraycrop.py" # 搜索文件路径(通常在skimage/util目录下) ``` 例如,常见路径为: `/usr/lib/python3/dist-packages/skimage/util/arraycrop.py` 或 `~/anaconda3/envs/<环境名>/lib/python3.x/site-packages/skimage/util/arraycrop.py` 2. 编辑文件,修改导入逻辑: 找到以下代码段: ```python from numpy.lib.arraypad import _validate_lengths ``` 替换为: ```python import numpy as np from distutils.version import LooseVersion as Version old_numpy = Version(np.__version__) < Version('1.16') if old_numpy: from numpy.lib.arraypad import _validate_lengths else: from numpy.lib.arraypad import _as_pairs as _validate_lengths ``` 3. 保存文件并重启Python环境。 #### **方法2:降级numpy版本** 如果方法1无效,尝试将numpy降级至1.16之前的版本: ```bash pip install numpy==1.15.4 # 或 conda install numpy=1.15.4 ``` #### **方法3:更新依赖库** 更新`scikit-image`或`caffe`到兼容新numpy的版本: ```bash pip install --upgrade scikit-image # 更新skimage ``` --- ### **验证解决** 运行以下代码检查是否修复: ```python import numpy as np from skimage.util import arraycrop # 确认skimage无报错 import caffe # 确认caffe导入正常 ``` --- ### **附加建议** - 使用虚拟环境(如`conda`或`venv`)隔离不同项目的依赖。 - 检查caffe安装文档,确认是否需指定特定版本的依赖库[^2][^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值