tutorial learning caffe2 cafe neural-network deep-learning caffe conv-neural-network pycaffe

neural-network - learning - caffe vs tensorflow



Cómo crear caffe.deploy desde train.prototxt (2)

Además de los consejos de @Shai, es posible que también desee desactivar las capas de exclusión.

Aunque Jia Yangqing, autor de Caffe, dijo una vez que las capas de abandono tienen un impacto insignificante en los resultados de las pruebas ( conversación grupal de google, 2014 ), otras herramientas de desarrollo sugieren inhabilitar el abandono en la fase de despliegue (por ejemplo, lasange ).

Este es mi train.prototxt . Y este es mi deploy.prototxt .

Cuando quiero cargar mi archivo de implementación obtengo este error:

File "./python/caffe/classifier.py", line 29, in __init__ in_ = self.inputs[0] IndexError: list index out of range

Entonces, eliminé la capa de datos:

F1117 23:16:09.485153 21910 insert_splits.cpp:35] Unknown bottom blob ''data'' (layer ''conv1'', bottom index 0) *** Check failure stack trace: ***

Entonces, quité bottom: "data" de la capa conv1.

Después de esto, obtuve este error:

F1117 23:17:15.363919 21935 insert_splits.cpp:35] Unknown bottom blob ''label'' (layer ''loss'', bottom index 1) *** Check failure stack trace: ***

Quité la bottom: "label" de la capa de pérdida. Y obtuve este error:

I1117 23:19:11.171021 21962 layer_factory.hpp:76] Creating layer conv1 I1117 23:19:11.171036 21962 net.cpp:110] Creating Layer conv1 I1117 23:19:11.171041 21962 net.cpp:433] conv1 -> conv1 F1117 23:19:11.171061 21962 layer.hpp:379] Check failed: MinBottomBlobs() <= bottom.size() (1 vs. 0) Convolution Layer takes at least 1 bottom blob(s) as input. *** Check failure stack trace: ***

¿Qué debo hacer para solucionarlo y crear mi archivo de implementación?


Hay dos diferencias principales entre un prototxto de "tren" y uno de "despliegue":

1. Entradas: mientras que los datos de entrenamiento se fijan a un conjunto de datos de entrenamiento preprocesados ​​(lmdb / HDF5, etc.), la implementación de la red requiere que procese otras entradas de una manera más "aleatoria".
Por lo tanto, el primer cambio es eliminar las capas de entrada (capas que presionan "datos" y "etiquetas" durante las fases TREN y PRUEBA). Para reemplazar las capas de entrada, debe agregar la siguiente declaración:

input: "data" input_shape: { dim:1 dim:3 dim:224 dim:224 }

Esta declaración no proporciona los datos reales para la red, pero le dice a la red qué forma esperar, lo que permite a Caffe preasignar los recursos necesarios.

2. Pérdida: las capas superiores en un prototxto de entrenamiento definen la función de pérdida para el entrenamiento. Esto generalmente involucra las etiquetas de verdad del suelo. Al implementar la red, ya no tiene acceso a estas etiquetas. Por lo tanto, las capas de pérdida deberían convertirse en salidas de "predicción". Por ejemplo, una capa "SoftmaxWithLoss" se debe convertir a una simple capa "Softmax" que emite la probabilidad de clase en lugar de la pérdida de probabilidad de log. Algunas otras capas de pérdida ya tienen predicciones como entradas, por lo tanto, basta con eliminarlas.

Actualización : consulte este tutorial para obtener más información.