tensorflow基礎學習 非線性迴歸實現,matplotlib可視化結果

開發平臺:win10+py3.6 64bit

使用的工具以及庫:

  • pycharm(全宇宙唯一一款專門用做python開發的工具)功能強大
  • tensorflow-gpu 1.9 (win10下配置gpu環境過程多坑,下次補配置教程)
  • tensorflow cpu版也是可以的
  • numpy
  • matplotlib

下面進入正題(代碼模塊有詳細註釋):

話不多說,先上個效果圖
在這裏插入圖片描述

1. show code

# coding: utf-8
# 導入對應的庫
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# 使用numpy生成在 [-0.5, 0.5] 內 **均勻分佈**的 200個隨機點
# linspace():返回帶有數據的一個一維的ndarry
# [:, np.newaxis], 將這一維數組轉化爲一個 [200, 1]的ndarry, 也就是200行,1列的數組
x_data = np.linspace(-0.5, 0.5, num=200)[:, np.newaxis]

# 生成隨機的噪聲,不然就是一個很漂亮的曲線了
noise = np.random.normal(0, 0.02, x_data.shape)
y_data = np.square(x_data) + noise

如圖, (x, y)
在這裏插入圖片描述

下面是運算時的網絡結構,只寫了一層隱藏層,由於數據很簡單也沒必要多寫,大家可以自己嘗試去加一下

# 定義兩個placeholder,用於後面訓練的時候實時提供數據
x = tf.placeholder(tf.float32, [None, 1])
y = tf.placeholder(tf.float32, [None, 1])

# 定義神經網絡中間層
# 設置神經元的個數[1, 10], 1個特徵值輸入, 10 個神經元運算
# 一個樣本輸出10個值
Weights_L1 = tf.Variable(tf.random_normal([1, 10]))
biases_L1 = tf.Variable(tf.zeros([1, 10]))
Wx_plus_b_L1 = tf.matmul(x, Weights_L1) + biases_L1
# Wx_plus_b_L1: [None, 10] None個樣本,10個輸出值
# biases_L1:[1,10], 給每一個樣本計算的值加上偏置
# 激活函數: 使用 tanh
L1 = tf.nn.tanh(Wx_plus_b_L1)

# 定義神經網絡輸出層
# 因爲輸出只有一個預測值, 上一層的輸出[none, 10], 要求輸出[none,]
# 也就是一個樣本輸出一個結果,none個就有none行

Weights_L2 = tf.Variable(tf.random_normal([10, 1]))
biases_L2 = tf.Variable(tf.zeros([1, 1]))
Wx_plus_b_L2 = tf.matmul(L1, Weights_L2) + biases_L2
prediction = tf.nn.tanh(Wx_plus_b_L2)

# 損失函數, 使用方差計算,以後會用到交叉熵損失計算等
loss = tf.reduce_mean(tf.square(y - prediction))

# 使用梯度下降法訓練, 梯度下降就是找損失函數剪小最快的方向去修改權重和偏置
# 0.1是學習率, 可以簡單的理解爲,每次修改權重和偏置這些參數修改的幅度大小
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

開啓會話訓練,並且畫圖

with tf.Session() as sess:
    # 變量初始化
    sess.run(tf.global_variables_initializer())
    # 訓練2000步, 傳入之前生成的數據
    for _ in range(2000):
        sess.run(train_step, feed_dict={x: x_data, y: y_data})

    # 獲得預測值
    prediction_value = sess.run(prediction, feed_dict={x: x_data})
    # 畫圖
    plt.figure()
    plt.scatter(x_data, y_data)
    plt.plot(x_data, prediction_value, 'r-', lw=5)
    plt.show()

小結

這是我的第一篇博客,感覺來得有點晚,畢竟學了也有一段時間了,以後會接着更新python爬蟲,數據分析,數據挖掘,驗證碼識別這一類的學習經歷,當然還會有對應的環境搭配等,歡迎大家多多指點,大家相互交流學習。喜歡的話可以點一下關注,不會迷路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章