Могу ли я преобразовать функцию numpy в функцию тензорного потока? - PullRequest
1 голос
/ 03 апреля 2020

Моя цель - минимизировать переменную функцию f(x1, x2,..., xn), и это требует много сложных вычислений. Поэтому я использовал пакет scipy. numpy, чтобы написать f(x) и минимизировать его с помощью scipy.optimize.minimize(). Но для минимизации f(x) требуется почти 4 ~ 5 часов, что СЛИШКОМ медленно. Чтобы улучшить его скорость, я намерен использовать gpu. И требуется tensorflow, что не так удобно, как numpy. Таким образом, ниже я определяю функцию для преобразования функции numpy в функцию tensorflow.

Возьмем простой пример:

def f(x):
    return np.sin(x)

x = np.linspace(0, 5, 6)
X = tf.Variable(x, dtype=tf.float32)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)

    def tff(X):  # function in tensorflow
        x = X.eval()
        func = f(x)
        result = tf.convert_to_tensor(func)
        return result

    result = tff(X)
    sess.run(result)

Все идет хорошо, пока я не добавлю следующие строки:

  optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
  training_op = optimizer.minimize(tff(X))

  iteration = 1000
  for i in range(iteration):
      sess.run(training_op)
  best_X = X.eval()
  print(best_X)

Он упал ... и показал ошибку ниже:

ValueError: No gradients provided for any variable, check your graph for ops that do not support gradients, between variables

Так можно ли преобразовать функцию numpy в функцию tensorflow и использовать GradientDescentOptimizer? Если нет, что я могу сделать, чтобы улучшить скорость оптимизации без переписывания функции в формате tensorflow?

Кстати, я запускаю код на google colab, поэтому мне не нужно загружать пакет tensorflow на свой компьютер.

...