Каков эквивалентный код R для этой программы TensorFlow в Python? - PullRequest
0 голосов
/ 26 января 2020

Я работаю над обучением решению уравнений в R, и мне интересно делать это через TensorFlow (я уже знаю, как это сделать с помощью GA и имитации отжига). Я строю эквивалентный код в R для этой python программы, которая выполняет Y = X + Z и решает для Z (нашел его в этом блоге ). Я потратил часы, пытаясь найти множество вариантов функций, просматривая их в блогах inte rnet и документациях CRAN.

import tensorflow as tf
x = tf.constant([[1., 2.]])
y = tf.constant([[12., 4.]])
Z = tf.Variable(tf.zeros([1, 2]))

yy = tf.add(x, Z)
deviation = tf.square(y - yy)

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(deviation)

init = tf.global_variables_initializer()
sess = tf.Session();
sess.run(init)
for i in range(5000):
 sess.run(train_step)
print(sess.run(Z))

Ниже приведен код R, который я разработал до сих пор, пробуя многие варианты программа в процессе:

library(tensorflow)
x = tf$constant(c(1.,2.))
y = tf$constant(c(12,4))
Z = tf$Variable(tf$zeros(2,1))
yy = tf$add(x, Z)
deviation = tf$square(y - yy)

train_step = tf$optimizers$Adam(0.01)

Теперь я не могу добавить функцию minimal () в train_step, так как получаю сообщение об ошибке, которое говорит, что оно не является атрибутом оптимизатора. Я пытался использовать функции оценки, компиляции и других функций из tenorflow и keras, но не смог выяснить, как это сделать.

1 Ответ

0 голосов
/ 26 января 2020

Получить градиент относительно легко, применяя их к переменной. Я не могу понять, как это сделать с переменной tf $. Может быть, это все еще может помочь:

library(tensorflow)


optimizer <- tf$keras$optimizers$Adam(0.001)

x = tf$constant(c(1.,2.))
y = tf$constant(c(12,4))
Z = tf$Variable(tf$zeros(2,1))

with(tf$GradientTape() %as% tape, {
  yy = tf$add(x, Z)
  deviation = tf$square(y - yy)
})

grads <- tape$gradient(deviation,Z)
grads
tf.Tensor([-22.  -4.], shape=(2,), dtype=float32)
## now for adam part i cannot figure out how to apply it, usually you do:
# optimizer$apply_gradients(
#   purrr::transpose(list(grads, Z)) ## where Z would be model variables...
# )

РЕДАКТИРОВАТЬ: Если кто-то знает, как решить этот последний шаг, пожалуйста, отредактируйте / прокомментируйте решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...