上篇文章中我們講解了單變數線性回歸的例子,對於非線性的資料分布,用單變數線性回歸擬合程度一般,我們來試試多項式回歸。
前面的步驟還是和上篇一樣,後面會新增多個變數來對資料進行擬合。
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...