Tensoflow 學習筆記二 神經網路的優化

2021-10-02 20:04:32 字數 3490 閱讀 9807

神經元模型:用數學公式表示為:

,為啟用函式。神經網路是以神經元為基本單

元構成的。

啟用函式:引入非線性啟用因素,提高模型的表達力。

常用的啟用函式有 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。使用這種方法,可以將恢復的索引 觸發器和約束條件重新命名為更實用的名稱...