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