import sys
print(sys.version)
'''
3.5.3 |Continuum Analytics, Inc.| (default, May 15 2017, 10:43:23) [MSC v.1900 64 bit (AMD64)]
'''
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
def add_layer(inputs, in_size, out_size, activation_function=None):
#weights為一個in_size行, out_size列的隨機(jī)變量矩陣
Weights = tf.Variable(tf.random_normal([in_size, out_size]))
#在機(jī)器學(xué)習(xí)中,biases的推薦值不為0,所以我們這里是在0向量的基礎(chǔ)上又加了0.1。
biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
Wx_plus_b = tf.matmul(inputs, Weights) + biases
#激勵函數(shù)為None時,輸出就是當(dāng)前的預(yù)測值——Wx_plus_b,不為None時,就把Wx_plus_b傳到activation_function()函數(shù)中得到輸出
if activation_function is None:
outputs = Wx_plus_b
else:
outputs = activation_function(Wx_plus_b)
return outputs
x_data = np.linspace(-1,1,300, dtype=np.float32)[:, np.newaxis]
noise = np.random.normal(0, 0.05, x_data.shape).astype(np.float32)
y_data = np.square(x_data) - 0.5 + noise
#這里的None代表無論輸入有多少都可以,因?yàn)檩斎胫挥幸粋€特征,所以這里是1
xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])
#通常神經(jīng)層都包括輸入層、隱藏層和輸出層。這里的輸入層只有一個屬性, 所以我們就只有一個輸入;隱藏層我們可以自己假設(shè),這里我們假設(shè)隱藏層有10個神經(jīng)元;
# 輸出層和輸入層的結(jié)構(gòu)是一樣的,所以我們的輸出層也是只有一層。 所以,我們構(gòu)建的是——輸入層1個、隱藏層10個、輸出層1個的神經(jīng)網(wǎng)絡(luò)。
l1 = add_layer(xs, 1, 10, activation_function=tf.nn.relu)
#接著,定義輸出層。此時的輸入就是隱藏層的輸出——l1,輸入有10層(隱藏層的輸出層),輸出有1層。
prediction = add_layer(l1, 10, 1, activation_function=None)
#對二者差的平方求和再取平均
loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction),reduction_indices=[1]))
#接下來,是很關(guān)鍵的一步,如何讓機(jī)器學(xué)習(xí)提升它的準(zhǔn)確率。tf.train.GradientDescentOptimizer()中的值通常都小于1,這里取的是0.1,代表以0.1的效率來最小化誤差loss。
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion()#持續(xù)畫圖,不暫停
plt.show()
for i in range(1000):
# training
sess.run(train_step, feed_dict={xs: x_data, ys: y_data})
if i % 50 == 0:
# to see the step improvement
print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
try:
ax.lines.remove(lines[0])
except Exception:
pass
prediction_value = sess.run(prediction, feed_dict={xs: x_data})
# plot the prediction
lines = ax.plot(x_data, prediction_value, 'r-', lw=5)
plt.pause(1)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。