c++ neural-network deep-learning normalization caffe

c++ - Capa de normalización Min-Max en Caffe



neural-network deep-learning (1)

Soy novato en caffe, estoy tratando de normalizar la salida de convolución entre 0 a 1 con Min-Max Normalization.

Out = X - Xmin / (Xmax - Xmin)

He revisado muchas capas (Power, Scale, Batch Normalization, MVN) pero nadie me está dando la salida de Normalización min-max en Capas. Alguien puede ayudarme ??

************* mi prototxt *****************

name: "normalizationCheck" layer { name: "data" type: "Input" top: "data" input_param { shape: { dim: 1 dim: 1 dim: 512 dim: 512 } } } layer { name: "normalize1" type: "Power" bottom: "data" top: "normalize1" power_param { shift: 0 scale: 0.00392156862 power: 1 } } layer { bottom: "normalize1" top: "Output" name: "conv1" type: "Convolution" convolution_param { num_output: 1 kernel_size: 1 pad: 0 stride: 1 bias_term: false weight_filler { type: "constant" value: 1 } } }

La salida de la capa de convolución no está en forma normalizada. Quiero salida normalizada Min-Max en formato de capa. Manualmente puedo usar código pero lo necesito en Capas. Gracias


Puede escribir su propia capa de C ++ siguiendo estas pautas , verá cómo implementar capas de "solo reenviar" en esa página.

Alternativamente, puede implementar la capa en python y ejecutarla en caffe mediante una capa '''' Python '''' :

Primero, implementa tu capa en python, ''/path/to/my_min_max_layer.py'' en ''/path/to/my_min_max_layer.py'' :

import caffe import numpy as np class min_max_forward_layer(caffe.Layer): def setup(self, bottom, top): # make sure only one input and one output assert len(bottom)==1 and len(top)==1, "min_max_layer expects a single input and a single output" def reshape(self, bottom, top): # reshape output to be identical to input top[0].reshape(*bottom[0].data.shape) def forward(self, bottom, top): # YOUR IMPLEMENTATION HERE!! in_ = np.array(bottom[0].data) x_min = in_.min() x_max = in_.max() top[0].data[...] = (in_-x_min)/(x_max-x_min) def backward(self, top, propagate_down, bottom): # backward pass is not implemented! pass

Una vez que tienes la capa implementada en python, simplemente puedes agregarla a tu red (asegúrate de que ''/path/to'' esté en tu $PYTHONPATH ):

layer { name: "my_min_max_forward_layer" type: "Python" bottom: "name_your_input_here" top: "name_your_output_here" python_param { module: "my_min_max_layer" # name of python file to be imported layer: "min_max_forward_layer" # name of layer class } }