我想使用以下卷积神经网络:
http://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/
从https://github.com/BVLC/caffe/tree/windows构建的caffe
适用于带有Visual Studio 2013的Windows 10,CUDA 7.5,cudNN 4和python支持。
现在,当我呼叫附带的两个网络中的任何一个时
net = caffe.Net('xyz.prototxt', 'xyz.caffemodel', caffe.TEST)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error parsing text-format caffe.NetParameter: 43:85: Unknown enumeration value of "CROP" for field "type".
Run Code Online (Sandbox Code Playgroud)
网络的第43行如下所示:
layers { bottom: 'd3c' bottom: 'u3a' top: 'd3cc' name: 'crop_d3c-d3cc' type: CROP }
Run Code Online (Sandbox Code Playgroud)
我在网上看过,有些人似乎遇到了相同的错误消息。但是,我找不到任何解决方案。
我现在的问题是:如何摆脱这个错误?
非常感谢您的帮助!
编辑:
按照Dale Song的建议更改.prototxt可以消除此错误,但又导致了另一个错误:
[libprotobuf ERROR ..\src\google\protobuf\text_format.cc:274] Error parsing text-format caffe.NetParameter: 10:102: Message type "caffe.LayerParameter" has no field named "blobs_lr".
Run Code Online (Sandbox Code Playgroud)
我通过替换来解决此问题
blobs_lr: 1 weight_decay: 1 blobs_lr: 2 weight_decay: 0
Run Code Online (Sandbox Code Playgroud)
与
param {lr_mult: 1 decay_mult: 1} param {lr_mult: 2 decay_mult: 0}
Run Code Online (Sandbox Code Playgroud)
在.prototxt,作为建议在这里。
谢谢!
解决方案:
您应该修改net.prototxt
:
layers { ... type: CROP }
到
layer { ... type: "Crop" }
同时,prototxt中其他层的参数也应修改为类似:
layer { ... type: "TypeString" }
,
可以TypeString
从以下位置找到:
REGISTER_LAYER_CLASS(some_layer_name)
相关文件中的行some_layer_name_layer.cpp
。例如,REGISTER_LAYER_CLASS(Data)
indata_layer.cpp
表示在 中编写数据层时TypeString
应该是。Data
net.prototxt
REGISTER_LAYER_CREATOR(some_layer_name, GetSomeLayer)
在layer_factory.cpp
。例如,REGISTER_LAYER_CREATOR(Convolution, GetConvolutionLayer)
表示在 中编写卷积层时TypeString
应该是。Convolution
net.prototxt
原因:
您的问题的原因是:您使用了旧的图层参数格式
layers { ... type: SOMELAYERNAME }
。
来自caffe.protoV1LayerParameter
的这种格式不支持某些较新的图层类型,包括图层。crop
您可以通过检查 不包含图层类型enum LayerType
来确认这一点。V1LayerParameter
CROP
为了避免这个问题,您始终可以使用最新的格式:
layer { ... type: "TypeString" }
其中TypeString
可以在上面提到的2个地方找到。
编辑1
简单的评论:
一般来说,错误:
Error parsing text-format caffe.xxxParameter: ...
Run Code Online (Sandbox Code Playgroud)
总是可以通过检查文件使用caffe.protoxxx.prototxt
中声明的正确字段名称并为其分配正确的值(通过检查字段类型及其值范围)来解决。
归档时间: |
|
查看次数: |
1824 次 |
最近记录: |