Tensorflowを勉強していて、いくつか問題がありました。 2x+2z-3t=y
(a = 2、b = 2、c = -3の場合はa、b、cの値を取得する)を近似しようとしているが、動作しない場合の損失関数を最小にしたい。私のミスはどこですか?テンソルフロープログラムが変数にスタックしました
これが私の出力です:
a: [ 0.51013279] b: [ 0.51013279] c: [ 1.00953674] loss: 2.72952e+10
私が必要:2 B:2 C:-3と0
import tensorflow as tf
import numpy as np
a = tf.Variable([1], dtype=tf.float32)
b = tf.Variable([1], dtype=tf.float32)
c = tf.Variable([0], dtype=tf.float32)
x = tf.placeholder(tf.float32)
z = tf.placeholder(tf.float32)
t = tf.placeholder(tf.float32)
linear_model = a * x + b * z + c * t
y = tf.placeholder(tf.float32)
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
x_train = np.arange(0, 5000, 1)
z_train = np.arange(0, 10000, 2)
t_train = np.arange(0, 5000, 1)
y_train = list(map(lambda x, z, t: 2 * x + 2 * z - 3 * t, x_train, z_train,
t_train))
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
for i in range(10000):
sess.run(train, {x: x_train, z: z_train, t: t_train, y: y_train})
curr_a, curr_b, curr_c, curr_loss = sess.run([a, b, c, loss], {x: x_train,
z: z_train, t: t_train, y: y_train})
print("a: %s b: %s c: %s loss: %s" % (curr_a, curr_b, curr_c, curr_loss))
に近い損失私はの値を確認するためにマキシムのコードを少し変更しました、Bは、次のようにC:
_, loss_val, curr_a, curr_b, curr_c, model_val = sess.run([optimizer,
loss,a, b, c, linear model], {x: x_train, z: z_train, t: t_train,
y: y_train})
をだから私の出力は、次のとおりです。
10 2.04454e-11 1.83333 0.666667 -0.166667
20 2.04454e-11 1.83333 0.666667 -0.166667
30 2.04454e-11 1.83333 0.666667 -0.166667
I = 2、B = 2を期待、c = -3
しかし、値が近いa = 2、b = 2、c = -3 私はこのようなものを取得する必要があると思った –
@СтаниславКитаевは私の答えを参照してください:多くのローカルミニマがあります。見つかったa、b、cは、データをほぼ完全に適合させます。それらを別々に初期化すると、別の解決策が得られます。 – Maxim
もう一度質問にお答えしますか? 変数に力を加えて(x^2 ...など)この関数を変更できますか? –