複数の線形回帰の2つの実装があります.1つはtensorflow
を使用し、もう1つはnumpy
を使用します。 numpy
実装がhereである私は、データのダミーセットを生成し、私は私が使用される重みを回復しようとするが、numpy
1は、初期の重みを返すものの、tensorflow
一つは常に(これも一種の仕事の)複数の線形回帰のためにTensorFlowを使用すると、異なる重みが得られるのはなぜですか?
を異なる重みを返します。ここでTFの実装です:numpy
バージョンは私がデータを生成するのに使用される重みに非常に近いです[0.392, 0.907, 0.9288]
周りの重みを取得する実行中
import numpy as np
import tensorflow as tf
x = np.array([[i, i + 10] for i in range(100)]).astype(np.float32)
y = np.array([i * 0.4 + j * 0.9 + 1 for i, j in x]).astype(np.float32)
# Add bias
x = np.hstack((x, np.ones((x.shape[0], 1)))).astype(np.float32)
# Create variable for weights
n_features = x.shape[1]
np.random.rand(n_features)
w = tf.Variable(tf.random_normal([n_features, 1]))
w = tf.Print(w, [w])
# Loss function
y_hat = tf.matmul(x, w)
loss = tf.reduce_mean(tf.square(tf.sub(y, y_hat)))
operation = tf.train.GradientDescentOptimizer(learning_rate=0.000001).minimize(loss)
with tf.Session() as session:
session.run(tf.initialize_all_variables())
for iteration in range(5000):
session.run(operation)
weights = w.eval()
print(weights)
スクリプトを実行するには、私に[-0.481, 1.403, 0.701]
周りの重みを取得します。[0.4, 0.9, 1]
学習率とエポックパラメータの両方が同じであり、両方ともランダムに初期化されます。どちらの実装でもデータを正規化せず、複数回実行しました。
結果が異なるのはなぜですか?私はまた、w = tf.Variable(np.random.rand(n_features).reshape(n_features,1).astype(np.float32))
を使ってTFバージョンの重みを初期化しようとしましたが、それも修正されませんでした。 TF実装に何か問題がありますか?