Минимизируйте переменный тензор потока функции с заполнителем - PullRequest
0 голосов
/ 02 марта 2020

Я хотел бы сделать минимизацию, которая находит наиболее подходящий фазовый сдвиг для функции sin. В этом примере я предоставляю

sin (x + 2.01)

, и в результате минимизации я хотел бы найти, что наилучшая функция синуса, соответствующая приведенному выше, возвращает phase = 2.01 .

Целью функции потерь является суммирование (каждого временного случая) квадратов разностей.

Я включил приведенный ниже код,

import tensorflow as tf
from tensorflow.python.training import gradient_descent

phase = tf.Variable(0, trainable=True, dtype='float64', name='phase_tf')
y = tf.placeholder(dtype='float64', name="y_placeholder")
t = tf.placeholder(dtype='float64', name='t_placeholder')

test_t = np.linspace(0, 6, 100, dtype='float64')
test_y = np.sin(test_t + 2.01)
loss = tf.reduce_sum(tf.square(y - tf.math.sin(t + phase)))

opt = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run([phase, loss]))
    sess.run(opt, feed_dict={y:test_y, t:test_t})

Однако я не могу обойти эту ошибку

InvalidArgumentError: You must feed a value for placeholder tensor 't_placeholder_15' with dtype double
     [[{{node t_placeholder_15}} = Placeholder[dtype=DT_DOUBLE, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

Я предполагаю, что значения не передаются заполнителю правильно, однако я передаю их в сеанс. Я знаю, что это также можно сделать в scipy проще, но я хотел бы сделать это в tenorflow:)

...