日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorFlow学习(三)——神经网络进阶

發布時間:2024/1/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorFlow学习(三)——神经网络进阶 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TensorFlow學習(三)——神經網絡進階DNN

  • 一、神經網絡的進階概念
    • 激活函數
    • 偏置項
    • 損失函數
      • 經典損失函數
        • 交叉熵(cross entropy)損失函數——分類問題
          • 示例展示
          • 代碼表示
          • 代碼說明
        • 均方誤差——回歸問題(數值預測等)
          • 代碼展示
          • 代碼說明
      • 自定義損失函數
        • 示例展示
        • 代碼展示
        • 代碼說明
    • 學習率設置
        • 指數衰減法
        • 代碼展示
        • 代碼說明
  • 二、使用自定義損失函數實現的神經網絡

一、神經網絡的進階概念

激活函數

在線性模型中,模型的輸出是輸入的加權和,例如通過下面這個公式計算的模型

該公式稱為線性變換,該模型稱為線性模型。只通過線性變換,任意層的全連接神經網絡與單層神經網絡的表達能力沒有太大區別。而深度學習主要是強調非線性。比如碰到如下問題,線性變換模型不能很好擬合。

當引入激活函數后,這個問題就能被很好解決,因為激活函數是非線性的。
常用的激活函數有relu、sigmod、tanh,它們在TensorFlow中分別為tf.nn.relu、tf.sigmoid、tf.tanh。
激活函數的具體介紹可以看這篇博客
https://blog.csdn.net/kangyi411/article/details/78969642

偏置項

在神經網絡中,偏置項一般置為1,是一個常量。偏置項具體介紹可以參考這篇博客
https://blog.csdn.net/Uwr44UOuQcNsUQb60zk2/article/details/81074408

損失函數

損失函數簡單講就是神經網絡中優化算法的優化目標,通過最小化損失函數,然后神經網絡能夠學習到權重,從而實現我們所見的預測、分類等功能。

經典損失函數

交叉熵(cross entropy)損失函數——分類問題

x表示所屬類別
給定兩個概率分布p和q,通過q定義p的交叉熵:H(p, q) = – ∑ x p ( x ) l o g q ( x ) \sum_{x}p(x)log\ q(x) x?p(x)log?q(x)
交叉熵刻畫了兩個概率分布之間的距離,概率分布刻畫了不同事件發生的概率
當事件總數有限時,概率分布函數p(X=x)滿足 ? x , p ( X = x ) ∈ [ 0 , 1 ] 且 ∑ x p ( X = x ) = 1 \forall x, \quad p(X=x) \in [0, 1]且\sum_{x}p(X=x) = 1 ?x,p(X=x)[0,1]x?p(X=x)=1
將前向傳播的結果變為概率分布可以適用softmax回歸,在TensorFlow中,softmax回歸只是額外的一層處理層,加入了softmax層的神經網絡如圖。一般要預測多少類,softmax就輸出多少個。

若神經網絡輸出為y1,y2,…,yn,則經過softmax回歸處理后的輸出為: s o f t m a x ( y i ) = y i ′ = e y i ( ∑ j = 1 n e y i ) softmax(y_i) = y'_i = \frac{e^{y_i}} {(\sum_{j=1}^{n}\ e^{y_i})} softmax(yi?)=yi?=(j=1n??eyi?)eyi??
這樣的話就可以將結果轉換為一個概率分布,從而使用交叉熵損失函數計算預測的概率分布和真實概率分布之間的距離。
當使用交叉熵作為神經網絡的損失函數時,p代表正確答案,q代表預測值

示例展示

假設一個三分類問題,某個樣例的正確答案是(1,0,0)。某模型經過Softmax回歸之后的預測答案是(0.5,0.4,0.1), 那么這個預測和正確答案之間的交叉熵為:
H((1, 0, 0), (0.5, 0.4, 0.1))= -(1 x log0.5+ 0 x log0.4+ 0 x log0.1) ≈ 0.3
如果另外一個模型的預測是(0.8,0.1,0.1),那么這個預測值和真實值之間的交叉熵是:
H((1, 0, 0), (0.8, 0.1, 0.1))= -(1 x log0.8 + 0 x log0.1 + 0 x log0.1) ≈ 0.1

代碼表示

corss_entropy = -tf.reduce_mean(y_real * tf.log(tf.clip_by_value(y_pred, 1e-10, 1.0))

代碼說明

其中y_real代表實際值,也就是上面示例中的(1, 0, 0)
y_pred表示預測值,也就是上面示例中的(0.5, 0.4, 0.1)和(0.8, 0.1, 0.1)
tf.clip_by_value函數可以將張量限制在一定范圍內,從而避免運算錯誤
例如

v = tf.constant([1., 2., 3.], [4., 5., 6.]]) print(tf.clip_by_value(v, 2.0, 5.0).eval())

輸出如下

將所有小于2.0的替換為2.0,將所有大于5的替換為5
*表示矩陣點乘,tf.matmul表示矩陣乘法
在TensorFlow中可以直接使用softmax回歸后的交叉熵損失函數

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(y_pred, y_real)

均方誤差——回歸問題(數值預測等)

M S E ( m e a n s q u a r e d e r r o r ) = ∑ i = 1 n ( y i ? y i ′ ) 2 n MSE(mean squared error) = \frac{\sum_{i=1}^{n}\ (y_i - y'_i)^2} n MSE(meansquarederror)=ni=1n??(yi??yi?)2?
其中yi表示batch中第i個數據的正確答案,y’i為神經網絡給出的預測值。

代碼展示
tf.reduce_mean(tf.square(y_real - y_pred))
代碼說明

y_real表示實際值
y_pred表示輸出值
"-"表示對于的元素相減,類似于點乘

自定義損失函數

示例展示

例如損失函數如下: L o s s ( y , y ′ ) = ∑ i = 1 n f ( y i , y i ′ ) , f ( x , y ) = { a ( x ? y ) x > y b ( y ? x ) x ≤ y Loss(y, y') = \sum_{i=1}^n\ f(y_i, y'_i),f(x, y)=\begin{cases} a(x - y) & x > y \\ b(y - x) & x≤ y \end{cases} Loss(y,y)=i=1n??f(yi?,yi?)f(x,y)={a(x?y)b(y?x)?x>yxy?
其中yi為第i個數據的正確答案,y’i為神經網絡得到的預測值,a和b是常量

代碼展示

# windows下tf沒有select函數,使用where函數代替 # method "select" don't exist in windows, you can replace it with "where()" loss = tf.reduce_sum(tf.select(tf.greater(x, y), (x - y) * a, (y - x) * b))

代碼說明

上述代碼通過tf.select和tf.greater實現選擇操作
tf.greater(judgement, operation1, operation2)比較兩個元素大小,當judgement是True時,執行operation1,當judgement是False時,執行operation2

學習率設置

指數衰減法

該方法在TensorFlow中可以通過調用tf.train.exponential_decay實現,大概過程如下
d e c a y e d _ l e a r n i n g _ r a t e = l e a r n i n g _ r a t e ? d e c a y _ r a t e g l o b a l _ s t e p / d e c a y _ s t e p decayed\_learning\_rate = learning\_rate * decay\_rate^{global\_step / decay\_step} decayed_learning_rate=learning_rate?decay_rateglobal_step/decay_step
其中decaed_learining_rate是每輪優化時使用的學習率,learning_rate為初始學習率,decay_rate為衰減系數,decay_steps為衰減速度。
在TensorFlow中可以通過設置參數staircase來選擇不同衰減方式。當staircase為True時,是階梯函數,如下圖黑色階梯函數;當staircase為False時,是連續函數,如下圖灰色連續曲線
staircase默認為False

代碼展示

global_step = tf.Variable(0)# 通過exponential_decay函數生成學習率 learning_rate = tf.train.exponential_decay(0.1, global_step, 100, 0.96, staircase=True)# 使用指數衰減更新學習率。在minimize中傳入global_step傳入參數將自動更新 learning_step = tf.train.GradientDescentOptimizer(learning_reate).minimize(cost_function, global_step=global_step)

代碼說明

上述代碼中設定初始學習率為0.1, 指定staircase為True,每訓練100輪后,學習率乘以0.96。

二、使用自定義損失函數實現的神經網絡

import tensorflow as tf from numpy.random import RandomState# load dataset batch_size = 8 dataset_size = 128 rnd = RandomState(1) X = rnd.rand(dataset_size, 2) Y = [[x1 + x2 + rnd.rand() / 10.0 - 0.05] for (x1, x2) in X]x = tf.placeholder(tf.float32, shape=(None, 2), name="x_input") y_real = tf.placeholder(tf.float32, shape=(None, 1), name="y_input")# initialize weights w1 = tf.Variable(tf.random_normal([2, 1], stddev=1, seed=1, name="weight1"))# forward propagation algorithm y_pred = tf.matmul(x, w1)# cost function a = 10 b = 1 cost_function = tf.reduce_sum(tf.where(tf.greater(y_real, y_pred), (y_real - y_pred) * a, (y_pred - y_real) * b)) training_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost_function)with tf.Session() as sess:tf.global_variables_initializer().run()print("before training, w1:\n{}".format(w1.eval()))steps = 5000for i in range(steps):start = (i * batch_size) % dataset_sizeend = min(start + batch_size, dataset_size)sess.run(training_step, feed_dict={x: X[start: end], y_real: Y[start: end]})if i % 1000 == 0:total_loss = sess.run(cost_function, feed_dict={x: X, y_real: Y})print("after %d steps, total loss is %f" % (i, total_loss))print("after training, w1:\n{}".format(w1.eval()))

總結

以上是生活随笔為你收集整理的TensorFlow学习(三)——神经网络进阶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧洲精品码一区二区三区免费看 | 久久99网 | 成人综合一区二区 | 亚洲少妇自拍 | 国内久久精品视频 | 天天干天天看 | 波多野结衣在线免费视频 | 日韩欧美大片在线观看 | 国产精品爽爽久久 | 久久国产乱子伦免费精品 | 激情网av | 精品国产乱码一区二 | youjizz视频 | 人妻 丝袜美腿 中文字幕 | 97人妻精品一区二区三区视频 | www..com黄色 | 国产又粗又猛又大爽 | 国内自拍视频在线观看 | 久久久久久逼 | 六月婷婷综合网 | 欧美成人aaa片一区国产精品 | 一级在线观看 | 国产精品天美传媒沈樵 | 成年人拍拍视频 | 欧美人成在线视频 | 日本美女动态图 | 久久人妻少妇嫩草av无码专区 | 男人你懂的网站 | 香蕉视频在线观看视频 | va视频在线 | a级片在线 | 国产精品一区二区毛片 | 完美搭档在线观看 | 97精品国产97久久久久久春色 | 欧美成人精品欧美一级私黄 | 午夜影院久久 | av在线不卡观看 | 久久伊人精品视频 | 性――交――性――乱a | 亚洲福利| 91视频.com| 久草aⅴ | 无法忍受在线观看 | 九九视频免费看 | 阿拉伯性视频xxxx | 六月婷婷在线观看 | 国产国语videosex另类 | 少妇被按摩师摸高潮了 | 亚洲AV成人无码久久精品同性 | 精品九九 | 欧美大片xxx | www.-级毛片线天内射视视 | 国产免费成人 | 亚洲成人一区二区在线观看 | 亚洲精品乱码久久久久久久久久久久 | 30一40一50老女人毛片 | 超碰男人天堂 | 精品中文字幕一区二区三区 | 亚洲精品20p | 少妇人妻偷人精品一区二区 | 夜夜摸夜夜爽 | 日本黄色片视频 | 一本色道久久综合无码人妻 | 亚洲天堂男人 | 日本污视频在线观看 | 欧美a在线视频 | 日韩小视频在线观看 | 久久久二区 | av男人的天堂av | 欧美刺激性大交 | 岛国片在线免费观看 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 国产一区亚洲二区三区 | 欧美激情18p | 男男play视频 | 黄色三级在线播放 | 亚洲成人看片 | 亚洲中文字幕一区 | 欧美日韩高清 | 熟女俱乐部一区二区 | 美女扒开尿口给男人捅 | 国产激情网站 | 国产嘿咻视频 | ww成人 | 手机av在线看 | 久久最新精品 | 91免费在线视频观看 | 横恋母在线观看 | 中出中文字幕 | 99av视频| 激烈的性高湖波多野结衣 | 96视频在线观看 | 久久不卡视频 | 天堂免费在线视频 | 国产欧美一区二区精品性色99 | 夜夜撸影院| 欧美精品 在线观看 | www免费网站在线观看 | www黄色片网站 |