Tensorflow, реализация функции активации квадратного корня (ошибка формирования)

1

В целях реализации классификации NN я нашел несколько действительно полезных обучающих программ, таких как этот (2 скрытых слоя, выход с одним горячим кодированием, регуляция вытеснения, нормализация и т.д.), Которые помогли мне с некоторой частью кривой обучения за Tensorflow API, Однако, прочитав публикацию о функциях активации SQRT и увидев оптимистичную обратную связь, я хотел бы поэкспериментировать с ней в моей архитектуре NN.

Не создав его в Tensorflow API, я посмотрел, как определить пользовательские функции активации, и нашел это решение для, и решил, что его "должно быть возможно" реализовать с помощью примитивов Tensorflow.

Так что если функция активации SQRT должна быть такой (пожалуйста, извините, скриншот, выглядите лучше, чем печатать на себе):

Изображение 174551

Я вставил этот код вместо функции ReLU скрытого слоя:

# ==== old activation function
# b = bias value x bias weight
# inputs = x data 
# w = weights
y = tf.nn.relu( tf.add( tf.matmul(w, tf.transpose(inputs)), b))

# ===== new act function
net = tf.cast( tf.add( tf.matmul(w, tf.transpose(inputs)), b), tf.float32)  # net input to activation function
cond = tf.greater_equal(net, tf.constant(0.0, dtype=tf.float32))            # >= condition
condTrue = tf.sqrt(net)                                   # if True
minOne = tf.constant(-1.0, shape=(N,1) dtype=tf.float32)  # -1 constant value
condFalse = tf.matmul(minOne, tf.sqrt( tf.abs(net)))      # if False
y = tf.cond(cond, lambda: condTrue, lambda: condFalse)    # act. function output 

Но если я попытаюсь запустить этот код, я получаю ошибку формирования:

ValueError ("Размеры должны быть равны, но 1 и 107 для" MatMul_2 "(op:" MatMul ") с входными формами: [107,1], [107,?].",)

Может кто-нибудь, пожалуйста, взгляните на фрагмент кода и скажите, правильно ли мой подход? Помимо ошибки, указывающей на проблему рангов между входами, я подозреваю, что моя большая проблема по-прежнему понимает и обертывает голову вокруг матричных операторов тензорного потока.

Между всеми умножениями, дополнениями и транспозициями я теряю информацию о том, какими должны быть требуемые основные формы данных тензоров. Будет ли мой код правильно определять предполагаемую функцию активации (и как насчет производной обратной поддержки?), А если нет, опишите where- и как я поступил неправильно?

Любая помощь была бы оценена, пожалуйста, я хотел бы лучше понять проблему (поскольку я все еще изучаю API)

Теги:
tensorflow
python-3.x
activation-function

1 ответ

1
Лучший ответ

Вы можете использовать более простую логику для реализации функции активации:

x = tf.constant([ -4, 4, -2, 2, 0], tf.float32)
act = tf.sign(x)* tf.sqrt(tf.abs(x))

with tf.Session() as sess:
   print(sess.run(act))

#[-2.  2. -1.4142135 1.4142135 0. ]
  • 0
    двойной палец вверх! Спасибо за предложение (не знал о знаковом операторе), и рад, что оно работает сейчас. Хотелось бы понять мою математическую математическую проблему в какой-то момент, но уверен, что материала для ускоренного курса более чем достаточно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню