標籤:

簡單邏輯回歸擬合數據代碼

簡單邏輯回歸擬合數據代碼

來自專欄 日常學習分享

聲明:代碼來源於書籍,閱讀代碼筆記

import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plt#自定義函數 後面調用plotdata = {batchsize:[], loss:[] } def moving_average(a, W = 10): # 滑動平均http://blog.csdn.net/weixin_38195506/article/details/75570099 if len(a) < W: return a[:] return [val if idx < W else sum(a[(idx - W): idx])/W for idx, val in enumerate(a)]train_X = np.linspace(-1, 1, 100)train_Y = 2 * train_X + np.random.randn(* train_X.shape) * 0.3# 加入雜訊後的 y = 2 * x#顯示模擬數據點plt.plot(train_X,train_Y, ro, label = original data)plt.legend()plt.show()#創建模型 #佔位符X = tf.placeholder(float) #後續會賦值的變數Y = tf.placeholder(float)#模型參數W = tf.Variable(tf.random_normal([1]), name = weight)b = tf.Variable(tf.zeros([1]), name = bias)Variable變數定義w被初始化為一維[-1,1]的隨機數,b被初始化為0的一維數字#前向結構z = tf.multiply(X, W) + b#反向優化cost = tf.reduce_mean(tf.square(Y-z))learning_rate = 0.01 #學習率越大調整速度越大但不精確,過小速度慢#利用梯度下降法進行優化optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)#初始化變數 注意:此函數初始化變數前必須將所有變數和模型節點定義完成init = tf.global_variables_initializer()#定義參數training_epochs = 20display_step = 2#啟動 session #注意Keras 和 tensorflow的區別with tf.Session() as sess: sess.run(init) plotdata = {batchsize:[], loss:[]} #存放批次值和損失值 # 向模型輸入數據 for epoch in range (training_epochs): for (x,y) in zip(train_X,train_Y): sess.run(optimizer, feed_dict = {X:x, Y:y}) #數據灌入 #顯示訓練中的詳細信息 顯示第幾次訓練時對應的參數 !注意之間的關係 if epoch % display_step == 0: loss = sess.run(cost, feed_dict = {X:train_X, Y:train_Y}) print(Epoch:, epoch+1, cost =, loss, W =,sess.run(W), b = , sess.run(b)) if not (loss == NA): #是個安全檢查。保證loss值有效才會將其用圖示顯示出來。 plotdata[batchsize].append(epoch) # 將批次值和損失值數據存入 plotdata[loss].append(loss) print(Finished!) print(cost = , sess.run(cost, feed_dict = {X:train_X, Y:train_Y}), W = , sess.run(W), b = , sess.run(b)) #訓練模型的可視化 (在創建自己的神經網路模型中經常需要) #簡單的繪圖方式,更多繪圖方式需查閱其他資料 plt.plot(train_X, train_Y, ro, label = Original data) plt.plot(train_X, sess.run(W) * train_X + sess.run(b), label = Fitted line) plt.legend() plt.show()#可視化訓練loss 可有助於參數調整 具體調整影響後續筆記中更新 plotdata[avgloss] = moving_average(plotdata[loss]) plt.figure(1) plt.subplot(211) plt.plot(plotdata[batchsize], plotdata[avgloss], b--) plt.xlabel(Minibatch number) plt.ylabel(loss) plt.title(Minibatch run vs. Training loss) plt.show() print ("x=0.2,z=", sess.run(z, feed_dict={X: 0.2}))

推薦閱讀:

MobileNetV2模型的簡單理解及其代碼實現
tf.get_variable
TensorFlow教程 - 預告
Kubeflow 安利:在 Kubernetes 上進行機器學習
Google第二代人工智慧平台Tensorflow初探

TAG:TensorFlow |