モノクロタイム

I'm from the future!

Caffeでネットワークが書けなくなった

こんにちは,れいじです.

reiji1020.hatenablog.com

この記事から丁度1年経った今,Caffeでネットワークが書けなくなりました.

久々にアップデートしたらこのザマだぜ.

draw_net.pyを動かした所このようなエラーがでてきました.

Traceback (most recent call last):
  File "draw_net.py", line 45, in <module>
    main()
  File "draw_net.py", line 41, in main
    caffe.draw.draw_net_to_file(net, args.output_image_file, args.rankdir)
  File "/home/caffe/caffe/python/caffe/draw.py", line 213, in draw_net_to_file
    fid.write(draw_net(caffe_net, rankdir, ext))
  File "/home/caffe/caffe/python/caffe/draw.py", line 195, in draw_net
    return get_pydot_graph(caffe_net, rankdir).create(format=ext)
  File "/home/caffe/caffe/python/caffe/draw.py", line 142, in get_pydot_graph
    node_label = get_layer_label(layer, rankdir)
  File "/home/caffe/caffe/python/caffe/draw.py", line 89, in get_layer_label
    layer.convolution_param.pad)
TypeError: %d format: a number is required, not RepeatedScalarFieldContainer

かなり情報が少なくて焦りましたが,caffe/python/caffe/draw.pyの中の以下の部分を書き換えれば良いようです.

def get_layer_label(layer, rankdir):
# 途中省略
      param = layer.convolution_param
        node_label = '"%s%s(%s)%skernel size: %d%sstride: %d%spad: %d"' %\
                     (layer.name,
                      separator,
                      layer.type,
                      separator,
                      layer.convolution_param.kernel_size[0] if len(param.kernel_size._values) else 1,
                      separator,
                      layer.convolution_param.stride[0] if len(param.stride._values) else 1,
                      separator,
                      layer.convolution_param.pad[0] if len(param.pad._values) else 0)
# 以下省略
  • layer.convolution_param.kernel_size
  • layer.convolution_param.stride
  • layer.convolution_param.pad

の部分を書き換えると無事に動くようになりました.良かった良かった.

参考はこちら.

https://groups.google.com/forum/#!topic/caffe-users/cvUPFctEbGk

ではでは~