Поезд одиночной модели Keras. Переменный с Tensorflow GradientTape () - PullRequest
2 голосов
/ 21 января 2020

В настоящее время я работаю над внедрением сети радиальных базисных функций (RBFN) в Keras / Tensorflow. Я настроил свой собственный слой RBF в Керасе, и теперь я хочу написать свою собственную программу тренировок, используя tf.GradientTape(). Моя модель Keras имеет набор из трех различных переменных (центр, ширина, вес) для активации RBF. Поскольку я хочу написать учебную программу со стратегиями роста сети и сокращения, мне нужно рассчитать градиент одного RBF по отношению к потерям.

Я использую Tensorflow 2.0.0 и python 3.7.4

Если я передаю все свои model.trainable_variables в функцию tf.GradientTape().gradients(), все работает нормально. Моя процедура выглядела бы так:

with tf.GradientTape() as t:
    y_hat = model(X)
    current_loss   = loss(y_hat, y)
    grads = t.gradient(current_loss, model.trainable_variables)
    optimizer.apply_gradients(zip(grads, model.trainable_variables))

Моя цель - применить градиенты только к ближайшему (по параметру центра) расположенному нейрону RBF к входу X[i]

with tf.GradientTape() as t:
        y_hat = model(X[i])
        current_loss   = loss(y_hat, y[i])

        centers = model.trainable_variables[0]

        eucl = tf.math.abs(centers - X[i])                    # euclidian distance of input to RBF centers              
        idx_nr = tf.math.argmin(tf.math.abs(eucl)).numpy()[0] # idx of nearest RBF

        grads = t.gradient(current_loss, model.trainable_variables[0][idx_nr]) # just the centers
        print(grads)

Однако это всегда возвращает None для градиентов. Ожидает ли t.gradient() переменные в указанном формате c? Я надеюсь, что вы, ребята, можете предложить хорошие идеи Заранее спасибо! :)

...