人工智能感覺(jué)很神秘,作為google公司力推的人工智能框架tensorflow也受到很多人的關(guān)注.本文用一個(gè)最簡(jiǎn)單的例子,帶領(lǐng)大家看看tensorflow是如何工作的.
如果你對(duì)人工智能的原理不了解可以看這篇文章人工智能-神經(jīng)網(wǎng)絡(luò)原理
首先導(dǎo)入tensorflow和numpy模塊
import tensorflow as tf
import numpy as np
我們知道tensorflow的學(xué)習(xí)是由一些正確的數(shù)據(jù)去訓(xùn)練,大量訓(xùn)練之后才會(huì)根據(jù)之前的經(jīng)驗(yàn)進(jìn)行預(yù)測(cè).所以我們先構(gòu)造一些正確的數(shù)據(jù).
x = np.random.rand(100).astype(np.float32)
y = x * 0.3 + 0.4
這里x是隨機(jī)的數(shù)列,y是真實(shí)數(shù)據(jù),也就是我們的訓(xùn)練樣本.
下面我們來(lái)構(gòu)造tensorflow中x與y的關(guān)系
Weights = tf.Variable(tf.random_uniform([1], -1, 1))
biases = tf.Variable(tf.zeros([1]))
y_prediction = Weights * x + biases
x是輸入值,y是tensorflow預(yù)測(cè)的值.由于不知道x與y是何種關(guān)系,所以用兩個(gè)變量表示,也就是經(jīng)常聽(tīng)到的權(quán)重Weights和偏置值biases.
tf.Variable是tensorflow中的變量
接下來(lái)我們要表示出來(lái)預(yù)測(cè)的值與真實(shí)值的誤差
loss = tf.reduce_mean(tf.square(y_prediction - y))
用預(yù)測(cè)出來(lái)的值減去真實(shí)值再平方,再求平均值,得出的值loss就是真實(shí)值與預(yù)測(cè)值的誤差.其實(shí)這就是我們中學(xué)里學(xué)的方差.
tf.square是平方運(yùn)算.tf.reduce_mean是求平均值.
那么接下來(lái)如何讓預(yù)測(cè)值更接近真實(shí)值呢,當(dāng)然是讓loss越來(lái)越小
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
在這一步tensorflow會(huì)不斷調(diào)整Weights和biases,去減少loss
GradientDescentOptimizer是優(yōu)化器的一種,tensorflow有很多種方法去減少loss
接下來(lái)我們要初始化tensorflow的變量,這點(diǎn)與其他語(yǔ)言不一樣,tensorflow的變量不會(huì)立刻分配內(nèi)存,像先把設(shè)計(jì)圖畫(huà)完再開(kāi)工
init = tf.global_variables_initializer()
激活神經(jīng)網(wǎng)絡(luò)
sess = tf.Session()
sess.run(init)
開(kāi)始訓(xùn)練,我們訓(xùn)練200次,每次都會(huì)調(diào)用優(yōu)化器調(diào)整權(quán)重和偏置值
我們每20步打印一次Weights,和biases的值
for step in range(200):
sess.run(train)
if step % 20 == 0:
print(step, sess.run(Weights), sess.run(biases))
訓(xùn)練到最后,我們發(fā)現(xiàn)tensorflow調(diào)整出來(lái)的Weights和biases非常接近與我們給定的0.3和0.4了,所以如果現(xiàn)在給一個(gè)x讓tensorflow做預(yù)期,得到的y值也會(huì)很接近真實(shí)值.
本文鏈接:https://www.kupposhadow.com/post/5a22463ce717c51ff6741cf2