2016-02-09 13 views
6

Myślałem, że dodanie nowego modułu, który wykona centralne łączenie.Jak napisać niestandardowy moduł warstwowy w przepływie tensora?

Szukałem w kodzie tensorflow i istnieje plik o nazwie gen_nn_ops.py, który wewnętrznie wywołuje funkcję z innego pliku, przekazując parametry "Maxpool", "AvgPool" itp., Aby wykonać wymagane obliczenia.

Chcę wykonać pulę centralną, która wybierze środkowy element w oknie. Mam gotowy kod dla wersji matlab i C++, ale muszę wiedzieć, jak dodać nowy moduł w TensorFlow do takich obliczeń. Również gdzie ustawić kod backpropogation.

Odpowiedz

8

Niestandardowa warstwa łącząca prawdopodobnie zostałaby zaimplementowana w C++. Aby zobaczyć, co trzeba by zrobić, zobaczmy gdzie realizacja tf.nn.max_pool_with_argmax() życiu:

  1. Funkcja otoki Python (sam tf.nn.max_pool_with_argmax()) jest automatycznie generowany w gen_nn_ops.py. To jest ostatecznie zaimportowane do nn.py, dzięki czemu pojawia się pod tf.nn, gdy jesteś import tensorflow as tf.

  2. W języku C++ istnieje op registration in ops/nn_ops.cc i kernel registration in kernels/maxpooling_op.cc.

  3. The kernel itself is defined in kernels/maxpooling_op.cc.

  4. Gradient jest zdefiniowany jako oddzielny opw tych samych miejscach.

Jest sporo do zrobienia, aby dodać nowy op (patrz this tutorial dla pełniejszego przewodnika), ale mam nadzieję, że te wskazówki mogą pomóc!

Powiązane problemy