Моя цель - минимизировать переменную функцию 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
на свой компьютер.