В целях реализации классификации NN я нашел несколько действительно полезных учебных пособий, таких как этот (2 скрытых слоя, вывод с горячим кодированием, регуляризация выпадения, нормализация и т. Д.), Которые помогли мне снемного кривой обучения за Tensorflow API.Однако, прочитав публикацию о функциях активации SQRT и увидев оптимистическую обратную связь, я хотел бы поэкспериментировать с ней в своей архитектуре NN.
Не найдя его в Tensorflow API, я посмотрел, как определить пользовательские функции активации, и обнаружил это решение для переполнения стека и решил, что его «можно реализовать»с примитивами Tensorflow.
Так что если функция активации SQRT должна быть такой (прошу прощения, вставка выглядит лучше, чем печатать сама):
Я вставил этот код вместо функции 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,?]. ",)
Может кто-нибудь пожалуйставзгляните на фрагмент кода и скажите, правильный ли мой подход?Помимо ошибки, указывающей на проблему ранга между входами, я подозреваю, что моя большая проблема все еще понимает и оборачивается вокруг операторов тензорного потока на основе матрицы.
Между всеми умножениями, сложениями и транспонированиями я теряю следо том, какие требуемые основные формы данных тензоров должны быть.Будет ли мой код правильно определять предполагаемую функцию активации (а как насчет обратной производной?), А если нет, опишите, где и как я ошибся?
Буду признателен за любую помощь, пожалуйста, я хотел бы лучше понять проблему (так как я все еще изучаю API)