Где функция активации рассчитывается в session.run () - PullRequest
0 голосов
/ 11 апреля 2019

Я учусь с открытым исходным кодом Tensorflow. Я хотел бы найти конкретное место, где выполняется фактический расчет.

Однако, это действительно трудно найти из глубоко открытого исходного кода. Итак, я хочу получить любые указания от людей, которые уже работали здесь.

Вся моя работа предполагает нейронную сеть.

Я начал с функции session.run из класса BaseSession.

Я плавал вокруг исходного кода оттуда. В конце концов я подумал, что все реальные вычисления выполняются в библиотеке с оболочкой, а не в среде python.

Так что, если я хочу подключить реальную часть вычисления, я должен перекомпилировать библиотеку c и снова обернуть ее, используя swig ???

То, что я нашел из исходного кода, таково. Я думал, что это где фактический расчет выполняется. (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/client/session.py)

def _call_tf_sessionrun(self, options, feed_dict, fetch_list, target_list, run_metadata):
  return tf_session.TF_SessionRun_wrapper(self._session, options, feed_dict, fetch_list, target_list, run_metadata)

Моя последняя цель - получить значения после выполнения функции активации (т.е. relu и т. Д.).

Я думаю, у меня есть два варианта для захвата значений из функции активации.

  1. Создание пользовательской функции активации, которая точно имитирует при активации тензорного потока и позволяет печатать значения.

    • Возможен ли способ захвата всех значений после вычисления функции активации путем создания пользовательской функции активации?
  2. Измените исходный код на C, перекомпилируйте библиотеку и поместите в библиотеку python tenorflow.

    • Выглядит ужасно, если справиться со всеми проблемами с этого

Что может быть лучше?

И если у вас есть намного более простые способы получения этих значений, пожалуйста, дайте мне знать метод ...

1 Ответ

0 голосов
/ 11 апреля 2019

Это довольно легко сделать в TensorFlow, введя соответствующие операции в session.run. Например, если мы определим следующие операции:

x = tf.placeholder(tf.float32, [None, input_dim])
pre_act_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
act_1 = tf.nn.relu(pre_act_1)
pre_act_2 = tf.add(tf.matmul(act_1, weights['h2']), biases['b2'])
act_2 = tf.nn.relu(pre_act_2)

А затем вы тренируете модель, чтобы веса уже были установлены. Затем, чтобы сделать вывод, обычно делают:

pred = session.run(act_2, feed_dict={x: some_value_for_x})

Это дает вам выход модели, который является act_2, активация второго слоя. Чтобы получить несколько активаций, просто выполните:

a1, a2 = session.run(act_1, act_2, feed_dict={x: some_value_for_x})

Вы можете даже получить значения до активации, выполнив:

pa1, a1, pa2, a2 = session.run(pre_act_1, act_1, pre_act_2, act_2, feed_dict={x: some_value_for_x})

Как видите, для этого не нужно взламывать исходный код TF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...