TensorFlow實戰2 實現多項式回歸

2021-08-10 20:22:59 字數 3505 閱讀 6455

上篇文章中我們講解了單變數線性回歸的例子,對於非線性的資料分布,用單變數線性回歸擬合程度一般,我們來試試多項式回歸。

前面的步驟還是和上篇一樣,後面會新增多個變數來對資料進行擬合。

1、資料準備

實際的資料大家可以通過pandas等package讀入,也可以使用自帶的boston house price資料集,這裡為了簡單,我們自己手造一點資料集。

2.準備好placeholder,開好容器來裝資料

x = tf.placeholder(tf.float32, name='x')

y = tf.placeholder(tf.float32, name='y')

3.初始化引數/權重

w = tf.variable(tf.random_normal([1]),name = 'weight')

b = tf.variable(tf.random_normal([1]),name = 'bias')

4.計算**結果

y_pred = tf.add(tf.multiply(x,w), b)

#新增高次項

w_2 = tf.variable(tf.random_normal([1]),name = 'weight_2')

y_pred = tf.add(tf.multiply(tf.pow(x,2),w_2), y_pred)

w_3 = tf.variable(tf.random_normal([1]),name = 'weight_3')

y_pred = tf.add(tf.multiply(tf.pow(x,3),w_3), y_pred)

# w_4 = tf.variable(tf.random_normal([1]),name = 'weight_4')

# y_pred = tf.add(tf.multiply(tf.pow(x,4),w_4), y_pred)

5.計算損失函式值

sample_num = xs.shape[0]   #取出xs的個數,這裡是100個

loss = tf.reduce_sum(tf.pow(y_pred - y,2))/sample_num #向量對應的點相減之後,求平方和,在除以點的個數

6.初始化optimizer

learning_rate = 0.01

optimizer = tf.train

.gradientdescentoptimizer(learning_rate).minimize(loss)

7.指定迭代次數,並在session裡執行graph

n_samples = xs.shape[0]

init = tf.global_variables_initializer()

with tf.session() as sess:

#初始化所有變數

sess.run(init)

#將蒐集的變數寫入事件檔案,提供給tensorboard使用

writer = tf.summary.filewriter('./graphs/polynomial_reg',sess.graph)

#訓練模型

for i in range(1000):

total_loss = 0

#設定總共的損失初始值為0

for x,y in zip(xs,ys): #zip:將兩個列表中的對應元素分別取乙個出來,形成乙個元組

_, l = sess.run([optimizer, loss], feed_dict=)

total_loss += l #計算所有的損失值進行疊加

if i%100 ==0:

print('epoch : '.format(i, total_loss/n_samples))

# 關閉writer

writer.close()

# 取出w和b的值

w, w_2, w_3, b = sess.run([w, w_2, w_3, b])

迭代的列印結果為下圖:

列印引數

作圖

plt.plot(xs, ys, 'bo', label='real data')    #真實值的散點

plt.plot(xs, xs*w + np.power(xs,2)*w_2 + np.power(xs,3)*w_3 + b, 'r', label='predicted data') #**值的擬合線條

plt.legend() #用於顯示圖例

plt.show() #顯示圖

從圖中可以看到,在使用了三個變數的多項式回歸之後,對資料點的擬合程度達到了較高的要求,其實此處使用的三個變數就是sin()的泰勒展開函式。如果還需要更近一步的進行擬合的話,可以增加變數的個數以及階數。

tensorflow筆記2(北大網課實戰)

1 正則化緩解過擬合 正則化在損失函式中引入模型複雜度指標,利用給w加權值,弱化了訓練資料的雜訊 一般不會正則化b。3 搭建模組化的神經網路八股 前向傳播就是搭建網路,設計網路結構 forward.py def forward x,regularizer regularizer是正則化權重 w b ...

Tensorflow實戰 張量

import tensorflow as tf tf.constant 是乙個計算,這個計算的結果為乙個張量,儲存在變數a中。a tf.constant 1.0,2.0 name a b tf.constant 2.0,3.0 name b result tf.add a,b,name add pr...

tensorflow實戰 實現簡單的神經網路

from tensorflow.examples.tutorials.mnist import input data import tensorflow as tf mnist input data.read data sets mnist data one hot true sess tf.int...