Как использовать tenorflow для оптимизации настраиваемого прогноза? - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь использовать тензор потока для оптимизации модели с помощью настраиваемого метода прогнозирования (который фактически реализован в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...