學習筆記TF014:捲積層、激活函數、池化層、歸一化層、高級層

来源:http://www.cnblogs.com/libinggen/archive/2017/05/25/6901770.html
-Advertisement-
Play Games

CNN神經網路架構至少包含一個捲積層 (tf.nn.conv2d)。單層CNN檢測邊緣。圖像識別分類,使用不同層類型支持捲積層,減少過擬合,加速訓練過程,降低記憶體占用率。 TensorFlow加速所有不同類弄捲積層捲積運算。tf.nn.depthwise_conv2d,一個捲積層輸出邊接到另一個捲積 ...


CNN神經網路架構至少包含一個捲積層 (tf.nn.conv2d)。單層CNN檢測邊緣。圖像識別分類,使用不同層類型支持捲積層,減少過擬合,加速訓練過程,降低記憶體占用率。

TensorFlow加速所有不同類弄捲積層捲積運算。tf.nn.depthwise_conv2d,一個捲積層輸出邊接到另一個捲積層輸入,創建遵循Inception架構網路 Rethinking the Inception Architecture for Computer Vision
https://arxiv.org/abs/1512.00567 。tf.nn.separable_conv2d,規模較大模型不犧牲準確率加速訓練,規模小模型快速收斂但準確率低。tf.nn.conv2d_transpos,捲積核用於新特征圖,每部分填充捲積核相同值,捲積核遍歷新圖像,重疊部分相加。斯坦福大學課程CS231n Winter 2016:Lecture 13。

激活函數與其他層輸出生成特征圖,對某些運算結果平滑(微分),為神經網路引入非線性(輸入輸出曲線關係),刻畫輸入複雜變化,訓練複雜模型。激活函數主要因素,單調,輸出隨輸入增長,可用梯度下降法找局部極值點;可微分,定義域內任意一點有導數,輸出可用梯度下降法。
tf.nn.relu,修正線性單元,斜坡函數。分段線性,輸入非負輸出相同,輸入為負輸出為0。不受“梯度消失”影響,取值範圍[0, +∞]。較大學習速率時,易受飽和神經元影響。損失信息但性能突出。輸入秩1張量(向量),小於0置0,其餘分量不變。
tf.sigmoid,只接收浮點數,返回區間[0.0, 1.0]內的值。輸入值較大返回接近1.0,輸入值較小返回接近0.0。適用於真實輸出位於[0.0, 1.0]。輸入接近飽和或變化劇烈,輸出範圍縮減成為問題。輸入0,輸出0.5,sigmoid函數值域中間點。
tf.tanh,雙曲正切函數,值域[-1.0, 1.0],有輸出負值能力。值域中間點為0.0。網路下層期待輸入為負值或0.0,會有問題。
tf.nn.dropout,依據可配置概率輸出設0.0。適合少量隨機性有助於訓練。keep_prob參數指定輸出保持概率。每次執行,不同輸出。丟棄輸出設為0.0。

池化層減少過擬合,減小輸入尺寸,提高性能。輸入降採樣,為後續層保留重要信息。池化層減小尺寸效率比tf.nn.conv2d高。
tf.nn.max_pool,跳躍遍歷張量,捲積核覆蓋元素最大數值作捲積結果。適合輸入數據灰度與圖像重要性相關。輸入為前一層輸出,非直接圖像。跨度strides使用image_height、image_width遍歷輸入。只保留輸入張量最大元素。最大池化(max-pooling),利用接受域(捲積核)完成。2X2接受域,單個通路最小數量降採樣。1X1接受域,輸出輸入相同。
tf.nn.avg_pool,跳躍遍歷張量,捲積核覆蓋各深度值取平均。適合捲積核重要,實現值縮減。如輸入張量寬度高度大,深度小。

tf.nn.relu是無界函數,歸一化識別高頻特征。tf.nn.local_response_normalization(tf.nn.lrn),局部響應歸一化,給定向量,每個分量被depth_radius覆蓋輸入加權和除。輸入保持在可接受範圍。考慮每個值重要性。歸一化輸出調整到區間[-1.0, 1.0]。

高級層減少代碼冗餘,遵循最佳實踐。
tf.contrib.layers.convolution2d。權值初始化、偏置初始化、可訓練變數輸出、偏置相加、添加激活函數。捲積核,可訓練變數。權值初始化用於捲積核首次運行值填充(tf.truncated_normal)。簡單元組形式表示捲積核高度和寬度。輸入圖像,tf.image.convert_image_dtype,調整各分量表示顏色值。TensorFlow要求浮點型描述圖像顏色,分量在[0, 1]。
tf.contrib.layers.fully_connected。全連接層,每個輸入輸出存在連接。CNN最後一層常是全連接層。TensorFlow全連接層格式,tf.matmul(features,weight)+bias。輸入張量與輸出層每個神經元連接。

原始輸入需要傳遞給輸入層。目標識別與分類輸入層tf.nn.conv2d。

 

    import tensorflow as tf
    features = tf.range(-2, 3)
    print features
    sess = tf.Session()
    print sess.run([features, tf.nn.relu(features)])
    features2 = tf.to_float(tf.range(-1, 3))
    print features2
    print sess.run([features2, tf.sigmoid(features2)])
    print sess.run([features2, tf.tanh(features2)])
    features3 = tf.constant([-0.1, 0.0, 0.1, 0.2])
    print features3
    print sess.run([features3, tf.nn.dropout(features3, keep_prob=0.5)])
    batch_size = 1
    input_height = 3
    input_width = 3
    input_channels = 1
    layer_input = tf.constant([
            [
                [[1.0], [0.2], [1.5]],
                [[0.1], [1.2], [1.4]],
                [[1.1], [0.4], [0.4]]
            ]
        ])
    print layer_input
    kernel = [batch_size, input_height, input_width, input_channels]
    print kernel
    max_pool = tf.nn.max_pool(layer_input, kernel, [1, 1, 1, 1], "VALID")
    print max_pool
    print sess.run(max_pool)
    layer_input2 = tf.constant([
            [
                [[1.0], [1.0], [1.0]],
                [[1.0], [0.5], [0.0]],
                [[0.0], [0.0], [0.0]]
            ]
        ])
    print layer_input2
    avg_pool = tf.nn.avg_pool(layer_input2, kernel, [1, 1, 1, 1], "VALID")
    print avg_pool
    print sess.run(avg_pool)
    layer_input3 = tf.constant([
            [
                [[1.], [2.], [3.]]
            ]
        ])
    print layer_input3
    lrn = tf.nn.local_response_normalization(layer_input3)
    print lrn
    print sess.run([layer_input3, lrn])
    image_input = tf.constant([
            [
                [[0., 0., 0.], [255., 255., 255.], [254., 0., 0.]],
                [[0., 191., 0.], [3., 108., 233.], [0., 191., 0.]],
                [[254., 0., 0.], [255., 255., 255.], [0., 0., 0.]]
            ]
        ])
    print image_input
    conv2d = tf.contrib.layers.convolution2d(
        image_input,
        num_outputs=4,
        kernel_size=(1,1),
        activation_fn=tf.nn.relu,
        stride=(1,1),
        trainable=True)
    print conv2d
    sess.run(tf.global_variables_initializer())
    print sess.run(conv2d)
    features4 = tf.constant([
            [[1.2], [3.4]]
        ])
    print features4
    fc = tf.contrib.layers.fully_connected(features4, num_outputs=2)
    print fc
    sess.run(tf.global_variables_initializer())
    print sess.run(fc)

 


參考資料:
《面向機器智能的TensorFlow實踐》

歡迎加我微信交流:qingxingfengzi
我的微信公眾號:qingxingfengzigz
我老婆張幸清的微信公眾號:qingqingfeifangz


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 ASP.NET Core 的變化和發展速度是飛快的,當你發現你還沒有掌握 ASP.NET Core 1.0 的時候, 2.0 已經快要發佈了,目前 2.0 處於 Preview 1 版本,意味著功能已經基本確定,還沒有學習過 ASP.NET Core 的同學可以直接從 2.0 開始學起,但是如 ...
  • Html 內容 Html就是超文本標記語言的簡寫,是最基礎的網頁語言。 Html是通過標簽來定義的語言,代碼都是由標簽所組成。 Html代碼不用區分大小寫。 Html代碼由<html>開始</html>結束。裡面由頭部分<head></head>和體部分<body></body>兩部分組成。 頭部分 ...
  • C#事件總結與應用 什麼是事件? 事件是特殊化的委托,委托是事件的基礎,所以在介紹事件之前先介紹一下委托 通俗的說就是: 事件就是消息驅動器通過委托類來調用感興趣的方法,事實上事件調用是間接的調用 就像是顯示中我的代理人一樣 發佈者與訂閱者 在學習事件的時候們首先要明白什麼是發佈者什麼是訂閱者: 通 ...
  • 一、constant 該函數可以將變數註冊在模塊中,並以服務的形式進行使用。 例如: var app = angular.module("MyModule",[]).constant("pageConfig",{pageSize:10}); 通過以上方式就定義了一個模塊中可用的pageConfig的 ...
  • CentOS上實現一鍵Maven打包並部署到Tomcat的Shell腳本 給這個Shell腳本取個名字,比如叫 deploylab, 將deploylab移到任何已經在系統環境變數的bin目錄下,如: 然後就可以在任意位置直接輸入命令 deploylab 一鍵部署最新代碼到Tomcat了。 ...
  • 在大型項目編碼推進中,涉及到 XML 解析問題時,大多數程式員都不太會選用底層的解析方式直接編碼。 主要存在編碼複雜性、難擴展、難復用....,但如果你是 super 程式員或是一個人的項目,也不妨一試。 Jdom/Dom4j/Xstream... 基於底層解析方式重新組織封裝的開源類庫,簡潔明瞭的 ...
  • 本節探討Java中的類載入機制,利用自定義的ClassLoader實現熱部署 ...
  • Myeclipse2016安裝Aptana 想裝個Aptana,裝了半天,網上說的什麼links方式啊,線上方式啊,都是什麼的浮雲。 所以自己來寫個安裝教程。 一、Aptana簡要介紹 Aptana有JavaScript,JavaScript函數,HTML,CSS語言的Code Assist功能。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...