2016-12-26 36 views
6

Tôi là người mới sử dụng caffe, tôi đang cố gắng chuẩn hóa đầu ra chập từ 0 đến 1 với Min-Max Normalization.Lớp chuẩn hóa Min-Max trong Caffein

Out = X - Xmin/(Xmax - Xmin)

Tôi đã kiểm tra nhiều lớp (điện, quy mô, hàng loạt Normalization, mvn) nhưng không ai cho tôi min-max Normalization đầu ra trong lớp. Ai giúp tôi với ??

************* prototxt tôi *****************

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

Lớp đầu ra chập không có trong Dạng chuẩn hóa Tôi muốn Min-Max Normalized output ở định dạng Layer. Theo cách thủ công, tôi có thể sử dụng mã nhưng tôi cần trong Lớp. Cảm ơn

+1

nếu bạn có thể làm điều đó trong mã, bạn có thể tự viết lớp. Nhưng làm thế nào để bạn difrentiate hoạt động này? backprop trông như thế nào? – Shai

+0

@Shai - Tôi không sử dụng nó để đào tạo vì vậy không cần thúc đẩy. Tôi chỉ muốn có được kết quả lọc. – AnkitSahu

+0

@Shai - cách viết Lớp trong mã. Vui lòng giải thích ? – AnkitSahu

Trả lời

4

Bạn có thể viết lớp C++ của riêng mình theo sau these guidelines, bạn sẽ thấy cách triển khai các lớp "chuyển tiếp" trong trang đó.

Ngoài ra, bạn có thể thực hiện các lớp trong python và thực hiện nó trong caffe qua một '"Python"' layer:

Thứ nhất, thực hiện lớp của bạn trong python, lưu nó trong '/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 

Một khi bạn có lớp được triển khai trong python, bạn có thể chỉ cần thêm nó vào mạng của mình (đảm bảo rằng '/path/to' nằm trong số $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 
    } 
} 
+1

Phương pháp của bạn có vẻ đúng nhưng thực tế tôi không thể thực hiện trong cửa sổ cpp vì vision_layers.hpp không có trong không gian làm việc của tôi ... Bạn có thể giúp tôi với cpp không ?? – AnkitSahu

+0

@AnkitSahu bạn không cần 'vision_layers.hpp' nó không còn được dùng nữa. Thực hiện theo các hướng dẫn trong [liên kết này] (https://github.com/BVLC/caffe/wiki/Development) và bạn đã hoàn tất! – Shai

Các vấn đề liên quan