[英]Tensorflow Linear Regression Not Converging to Correct Values
我有一個包含2列,輸入和輸出列的csv數據集,當我使用Excel查找趨勢線時,得到:
y = -0.4571x + 0.9011
當我運行以下代碼w並根據選擇的學習速度和批處理大小收斂到不同的值時。 我沒有任何運氣就玩着不同的價值觀。 也許我想念什么?
成本似乎也沒有改變。
learningRate = 0.001
epochs = 2000
batchSize = 20
df = pd.read_csv("C:\\Users\\Brian\\Desktop\\data.csv")
X = df[df.columns[0]].values
Y = df[df.columns[1]].values
def getBatch(batchSize, inputs, outputs):
idx = np.arange(0,len(inputs))
np.random.shuffle(idx)
idx = idx[:batchSize]
xBatch = [inputs[i] for i in idx]
yBatch = [outputs[i] for i in idx]
xBatch = np.reshape(xBatch, (batchSize,1))
return np.asarray(xBatch), np.asarray(yBatch)
w = tf.Variable(0.0, tf.float32)
b = tf.Variable(0.0, tf.float32)
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
prediction = tf.add(tf.multiply(x,w), b)
cost = tf.reduce_sum(tf.square(prediction-y))
optimizer = tf.train.GradientDescentOptimizer(learningRate).minimize(cost)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(epochs):
xBatch, yBatch = getBatch(batchSize,X,Y)
#for (trainX, trainY) in zip(xBatch,yBatch):
sess.run(optimizer, feed_dict={x: xBatch, y: yBatch})
if(epoch+1) % 50 == 0:
c = sess.run(cost, feed_dict={x: X, y: Y})
print("Epoch:", (epoch+1), "cost=", "{:.4f}".format(c), "w=", sess.run(w), "b=", sess.run(b))
print("Optimization Finished")
trainingCost = sess.run(cost, feed_dict={x: X, y:Y})
print("Training cost=", trainingCost, "w=", sess.run(w), "b=", sess.run(b))
當我運行以下代碼w並根據選擇的學習速度和批處理大小收斂到不同的值時。
因為,如果您運行sess.run(optimizer, feed_dict={x: xBatch, y: yBatch})
TensorFlow會執行以下操作。
w -= learningRate * dw
其中dw
是由梯度下降優化器計算的值。
因此,如果您更改learningRate
並運行程序,則會得到w
不同值。 w
影響dw
而dw
影響下一個w
。 因此,很難預測如果更改learningRate
w
將會變成什么樣的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.