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
}
}