神經元模型:用數學公式表示為:
,為啟用函式。神經網路是以神經元為基本單
元構成的。
啟用函式:引入非線性啟用因素,提高模型的表達力。
常用的啟用函式有 relu、sigmoid、tanh 等。
relutf.nn.relu()
sigmoidtf.nn.sigmoid()
tanhtf.nn.tanh()
神經網路的層數:一般不計入輸入層,層數 = n 個隱藏層 + 1 個輸出層
神經網路待優化的引數:
損失函式(
loss
):
用來表示
**值(
y)與已知答案(
y_)的差距。
在訓練神經網路時,通過不斷
改變神經網路中所有引數,使損失函式不斷減小,從而訓練出更高準確率的神經網路模型。
常用的損失函式
有均方誤差、自定義和交叉熵等。
均方誤差 mse:
loss_mse = tf.reduce_mean(tf.square(y_- y))
例
import tensorflow as tf
import numpy as np
#生成模擬資料集
batch_size=8 #一次餵入神經網路多少組資料,不宜過大
seed=23455
'''例如:
**酸奶日銷量 y,x1 和 x2 是影響日銷量的兩個因素。
應提前採集的資料有:一段時間內,每日的 x1 因素、x2 因素和銷量 y_。採集的資料盡量多。
在本例中用銷量**產量,最優的產量應該等於銷量。由於目前沒有資料集,所以擬造了一套數
據集。利用 tensorflow 中函式隨機生成 x1、 x2,製造標準答案 y_ = x1 + x2,為了更真實,求和後
還加了正負 0.05 的隨機雜訊。
'''#基於seed產生隨機數
rng=np.random.randomstate(seed)
#隨機數返回32行2列矩陣。 表示32組 體積和重量 作為特徵輸入
x=rng.rand(32,2)
#y為生成訓練集對應的標籤(正確答案)
#該標籤人為定義的是x1+x2 rng.rand()生成0~1的隨機數,除以10後,則為0~0.1的隨機數,
#-0.05後,則有 -0.5~0.5 的雜訊
y_=[[x1+x2+(rng.rand()/10.0-0.05)] for (x1,x2) in x]
#1.定義神經網路的輸入、引數和輸出,定義前向傳播過程
x=tf.placeholder(tf.float32,shape=(none,2))#神經網路輸入的特徵,每一組2個特徵
y_=tf.placeholder(tf.float32,shape=(none,1))#標準答案,每個標籤乙個元素,合格或不合格
#引數要和輸入輸出的特徵數相匹配,輸入2個特徵,輸出1個特徵
w1=tf.variable(tf.random_normal([2,1],stddev=1,seed=1))
#定義前向傳播過程
y=tf.matmul(x,w1)
#定義損失函式mse及反向傳播方法梯度下降
learning_rate=0.001
loss = tf.reduce_mean(tf.square(y_ - y)) #損失函式
train_step=tf.train.gradientdescentoptimizer(learning_rate).minimize(loss) #反向傳播
#train_step=tf.train.momentumoptimizer(learning_rate, momentum).minimize(loss)
#train_step=tf.train.adamoptimizer(learning_rate).minimize(loss)
#3.生成會話,訓練steps輪,在with結構中完成迭代
with tf.session() as sess:
init_op=tf.global_variables_initializer()
sess.run(init_op)
# 訓練模型
steps = 20000 # 訓練20000次
for i in range(steps):
start = (i * batch_size) % 32
end = start + batch_size
sess.run(train_step, feed_dict=) # x,y_(正確答案)為前向傳播輸入,執行訓練過程
if i % 500 == 0: # 每500輪列印一次loss值
print("after %d training steps, w1 is" % i)
print(sess.run(w1),"\n")
print("final w1 is:\n",sess.run(w1))
'''final w1 is:
[[0.98019385]
[1.0159807 ]]
接近1'''
最終
引數 w1=0.98,w2=1.02,
銷量**結果為 y =
0.98*x1 + 1.02*x2。由於在生成
資料集時,標準答案為 y = x1 + x2,因此,銷量**結果和標準
答案已非常接近,說明
該神經網路
**酸奶日銷量正確。
交叉熵
(cross entropy)
:表示兩個概率分布之間的距離。交叉熵越大,兩個概率分布距離越遠,兩
個概率分布越相異;交叉熵越小,兩個概率分布距離越近,兩個概率分布越相似。
用 tensorflow 函式表示為
softmax
函式應用:在
n 分類中,模型會有
n 個輸出,即
y1,y2…yn
,其中
yi 表示第
i 種情況出現的可
能性大小。將
n 個輸出經過
softmax
函式,可得到符合概率分布的分類結果。
在 tensorflow
中,一般讓模型的輸出經過
sofemax
函式,以獲得輸出分類的概率分布,再與標準
答案對比,求出交叉熵,得到損失函式,用如下函式實現:
學習筆記二
1 算符運算子 1 5為1 1 5為 1 即只看被除數的符號。b a 先賦值後運算 a b 先運算後賦值。2 字串資料與任何資料使用 都是相連線,最終都會變成字串,例如 ad 2 結果為 ad2 3 轉義字元 通過 來裝便後面字母或符號的含義 n換行 linux b 退格 r 按下回車鍵,windo...
學習筆記(二)
k 近鄰演算法中的python知識 1.建立乙個3x3的單位矩陣a,a.shape的結果為 3,3 2.建立乙個一維矩陣b,b.shape為矩陣的長度。3.建立乙個4x2的矩陣c,c.shape 1 為第一維的長度 2,c.shape 0 為第二維的長度 4 4.tile函式位於python模組 n...
學習筆記 二
從 站還原表 flashback table to before drop rename to 閃回刪除的表時,恢復的索引 觸發器和約束條件將保留各自的 站名稱。因此,建議在閃回刪除的表前查詢 站和dba constraints。使用這種方法,可以將恢復的索引 觸發器和約束條件重新命名為更實用的名稱...