Я пытаюсь использовать тензор потока для оптимизации модели с помощью настраиваемого метода прогнозирования (который фактически реализован в C ++).Пожалуйста, см. Иллюстративный пример ниже.
Возможно ли использовать оптимизированный метод прогнозирования в оптимизаторе tenorflow?Это означает, что функция принимает переменные модели в качестве входных данных и возвращает список типа double.Могу ли я использовать tenorflow для оптимизации переменных модели (здесь W), чтобы вывод настраиваемой функции прогнозирования был близок к цели (здесь y_train).Спасибо.
Я получаю ошибку «ValueError: Градиенты не указаны ни для одной переменной»
import tensorflow as tf
import numpy as np
tf.enable_eager_execution()
class Model():
def __init__(self, input_shape, output_shape, X_train, Y_train):
self.input_shape = input_shape
self.output_shape = output_shape
self.W = tf.Variable( np.random.rand(self.input_shape, self.output_shape))
self.variables = [self.W]
self.X_train=X_train
self.Y_train=Y_train
def prediction(self):
#return somefunc(self.X_train.numpy(), self.W.numpy())
## How to make the line above work?? ###
##somefunc returns a list of double which has same length as Y_train
## a way of mimic somefunc is:
##return tf.convert_to_tensor(tf.matmul( self.X_train, self.W ).numpy())
def loss(self):
return tf.losses.mean_squared_error(self.prediction(), self.Y_train)
X_train=np.random.rand(10,5)
Y_train=np.random.rand(10,1)
model=Model(5,1, X_train, Y_train)
optimizer = tf.train.AdamOptimizer(learning_rate = 0.1)
for i in range(2):
with tf.GradientTape() as tape:
curr_loss = model.loss()
grads = tape.gradient( curr_loss, model.variables )
optimizer.apply_gradients(zip(grads, model.variables),
global_step=tf.train.get_or_create_global_step())
print(curr_loss)