Tensorflow學習教程------非線性迴歸

本身搭建神經網絡求解非線性迴歸係數html

代碼網絡

複製代碼
#coding:utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

#使用numpy 生成200個隨機點
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis] #x_data:200行1列 數值在-0.5到0.5之間
noise = np.random.normal(0,0.02,x_data.shape)#noise :200行1列
y_data = np.square(x_data) + noise #y_data 200行1列

#定義兩個placeholder
x = tf.placeholder(tf.float32, [None,1]) #x:任意行 1列
y = tf.placeholder(tf.float32, [None,1]) #y:任意行 1列


#輸入的是一個數 輸出的也是一個數 所以輸入層和輸出層都是一個神經元
#定義一個神經網絡中間層 能夠是任意個神經元 例如10個
#定義神經網絡中間層
Weights_L1 = tf.Variable(tf.random_normal([1,10])) #1行10列
biase_L1 = tf.Variable(tf.zeros([1,10])) # 1,10
Wx_plus_b_L1 = tf.matmul(x, Weights_L1)+biase_L1 #x被正式賦值以後是200行1列 tf.matmul(x, Weights_L1)結果是200行10列 而biase_L1是1行10列 那麼這倆怎麼相加呢  在Python裏面 200行10列的A向量+1行10列的B向量, 至關於給A向量每行加了B向量
L1 = tf.nn.tanh(Wx_plus_b_L1) #使用雙曲正切函數做爲激活函數 

#定義神經網絡輸出層
Weights_L2 = tf.Variable(tf.random_normal([10,1]))
biase_L2 = tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2 = tf.matmul(L1,Weights_L2) + biase_L2
prediction = tf.nn.tanh(Wx_plus_b_L2)

#二次代價函數
loss = tf.reduce_mean(tf.square(y - prediction))
#使用梯度降低法
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:
    #變量初始化
    sess.run(tf.global_variables_initializer())
    for _ in range(2000):
        sess.run(train_step, feed_dict={x:x_data,y:y_data})
    #迭代2000次以後全部的權重值都求出來了
    #得到預測值
    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()
複製代碼
 

結果dom

 
分類:  深度學習
相關文章
相關標籤/搜索