實戰(zhàn)案例一 非線性模型
重點是神經(jīng)網(wǎng)絡(luò)中間層的應(yīng)用
import tensor as tf
import numpy as np
import matplotlib.pyplot as plt
#用np.linspace生成兩百個在-0.5到0.5之間的隨機值
因為需要使用的是二維數(shù)據(jù),所以用np.newaxis加一個維度翼闽,成為200行一列的矩陣
x_data = np.linspace(-0.5,0.5,200)[;,np.newaxis]
#加入噪音
noise = np.random.normal(0,0.02,x_data.shape)
#生成非線性模型
y_data = np.square(x_data) + noise
#定義兩個占位矩陣,行數(shù)不定,一列
x = tf.placeholder(tf.float32,[None,1])
y = tf.placeholder(tf.float32,[None,1])
## 定義神經(jīng)網(wǎng)絡(luò)中間層这刷,用10個神經(jīng)元作中間層,所以是1 - 10 - 1的構(gòu)架 ##
#定義權(quán)值娩井,1行10列
Weights_L1 = tf.Variable(tf.random_normal([1,10]))
#偏置值初始化為0
biases_L1 = tf.Variable(tf.zeros([1,10]))
#生成信號的總合(x矩陣乘以權(quán)值暇屋,然后加上偏置值)
Wx_plus_b_L1 = tf.matmul(x,Weight_l1) + biases_L1
#雙矩陣生成信號的總合
L1 = tf.nn.tanh(Wx_plus_b_L1)
#定義神經(jīng)網(wǎng)絡(luò)輸出層
中間層有10個神經(jīng)元,輸出層有1個神經(jīng)元洞辣,所以權(quán)值這里從[1,10]變?yōu)閇10,1]
Weights_L2 = tf.Variable(tf.random_normal([10,1]))
#偏側(cè)值仍然只有1個神經(jīng)元咐刨,所以是[1,1]
biases_L2 = tf.Variable(tf.zeros([1,1]))
#輸出層的輸入等于輸出層的輸出,所以x變?yōu)長1
Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
prediction = tf.nn.tanh(Wx_plus_b_L2)
#二次代價函數(shù)(見筆記1)
loss = tf.reduce_mean(tf.square(y - prediction))
#使用梯度下降法訓(xùn)練
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
#定義會話
with tf.Session() as sess:
#變量初始化扬霜,訓(xùn)練2000次
sess.run(tf.global_variables_initializer())
for _ in range(2000):
sess.run(train_setp,feed_dict={x:x_data,y:y_data})
#獲得預(yù)測值
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
因為有噪音定鸟,所以藍(lán)色的點是上下移動。紅線是訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)著瓶。它對于整個藍(lán)色樣本模型的loss是最小的联予。
TensorFlow學(xué)習(xí)筆記(1) http://www.reibang.com/p/25d53f2289f4