輔助知識:
深度學習算法更適合未標記數(shù)據(jù)状知,更適合強特征提然辔濉(深度框架),也更適合于模式識別(圖像饥悴、文本坦喘、音頻)
機器學習系統(tǒng)由三個主要部分組成,包括:
- 模型:用來預測或識別的系統(tǒng)西设。
- 參數(shù):模型做決定所使用的信號或因素瓣铣。
- 學習器:這個系統(tǒng)通過檢查預測和實際輸出的差異來調整參數(shù),再對模型進行調整贷揽。
示例過程:
1棠笑,你想確認如果學生要在考試中取得好成績,最優(yōu)的學習時間會是多少禽绪。
2蓖救,輸入假設,即學習 5 個小時就可以取得好成績丐一。
3,系統(tǒng)根據(jù)假設生成模型淹冰。
4库车,輸入實際信息,即每個學生的學習時間和考試成績樱拴。
5柠衍,系統(tǒng)根據(jù)這些數(shù)據(jù)(訓練集)進行學習調整。
6晶乔,重復4-5步珍坊,直到接近真實。
神經(jīng)網(wǎng)絡的實現(xiàn)過程
1正罢,準備數(shù)據(jù)集阵漏,提取特征作為輸入喂給神經(jīng)網(wǎng)絡(Neural Network,NN)
2,搭建 NN 結構履怯,從輸入到輸出(先搭建計算圖再用會話執(zhí)行)(NN前向傳播算法 ———— 計算輸出)
3回还,大量特征數(shù)據(jù)喂給 NN ,迭代優(yōu)化 NN 參數(shù)( NN 反向傳播算法 ———— 優(yōu)化參數(shù)訓練模型)
4叹洲,使用訓練好的模型預測和分類
運行過程:
代碼示例1
#coding:utf-8
import tensorflow as tf
#定義輸入和參數(shù)
x=tf.placeholder(tf.float32,shape=(None,2))
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
#定義向前傳播過程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
#用會話計算結果
with tf.Session() as sess:
init_op=tf.initialize_all_variables()
sess.run(init_op)
print "y is:\n",sess.run(y,feed_dict={x:[[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]})
知識點
1柠硕,反向傳播:訓練模型參數(shù),在所有參數(shù)上用梯度下降运提,使NN模型在訓練數(shù)據(jù)上的損失函數(shù)最小蝗柔。
2,損失函數(shù)(loss):計算得到的預測值y與已知答案y_的差距民泵。
3癣丧,均方誤差MSE:求前向傳播計算結果與已知答案之差的平方再求平均。
4洪灯,學習率:決定每次參數(shù)更新的幅度坎缭。
示例代碼2
#coding:utf-8
import tensorflow as tf
import numpy as np
BATCH_SIZE=8
seed=23455
#基于seed產(chǎn)生隨機數(shù)
rng=np.random.RandomState(seed)
#隨機數(shù)返回32行2列的矩陣 表示32組 體積和重量 作為輸入數(shù)據(jù)集
X=rng.rand(32,2)
#從X這個32行2列的矩陣中 取出一行 判斷如果和小于1 給Y賦值1 如果和不小于1 給Y賦值0
#作為輸入數(shù)據(jù)集的標簽(正確答案)
Y=[[int(x0+x1<1)] for (x0,x1) in X]
print "X:\n",X
print "Y:\n",Y
#定義神經(jīng)網(wǎng)絡的輸入 參數(shù)和輸出,定義前向傳播過程签钩。
x=tf.placeholder(tf.float32,shape=(None,2))
y_=tf.placeholder(tf.float32,shape=(None,1))
w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
#定義向前傳播過程
a=tf.matmul(x,w1)
y=tf.matmul(a,w2)
#定義損失函數(shù)及反向傳播方法
loss=tf.reduce_mean(tf.square(y-y_))
train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss)
#train_step=tf.train.MoentumOptimizer(0.001).minimize(loss)
#train_step=tf.train.AdamOptimizer(0.001).minimize(loss)
#生成會話掏呼,訓練STEPS輪
with tf.Session() as sess:
init_op=tf.initialize_all_variables()
sess.run(init_op)
#輸出目前(未經(jīng)訓練)的參數(shù)取值
print "w1:\n",sess.run(w1)
print "w2:\n",sess.run(w2)
print "\n"
#訓練模型
STEPS=3000
for i in range(STEPS):
start=(i*BATCH_SIZE)%32
end=start+BATCH_SIZE
sess.run(train_step,feed_dict={x: X[start:end],y_: Y[start:end]})
if(i%500)==0:
total_loss=sess.run(loss,feed_dict={x:X,y_:Y})
print("After %d training step(s),loss on all data is %g"%(i,total_loss))
#輸出訓練后的參數(shù)取值
print "\n"
print "w1:\n",sess.run(w1)
print "w2:\n",sess.run(w2)
參考: 機器學習是如何運作的?谷歌來告訴你
參考: 為什么會有深度學習铅檩?如何看待憎夷?
參考: 人工智能實踐:Tensorflow筆記