學習筆記TF013:捲積、跨度、邊界填充、捲積核

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

捲積運算,兩個輸入張量(輸入數據和捲積核)進行捲積,輸出代表來自每個輸入的信息張量。tf.nn.conv2d完成捲積運算。捲積核(kernel),權值、濾波器、捲積矩陣或模版,filter。權值訓練習得。捲積核(filter參數)權值數量決定需要學習捲積核數量。通道,電腦器視覺,描述輸出向量。RG ...


捲積運算,兩個輸入張量(輸入數據和捲積核)進行捲積,輸出代表來自每個輸入的信息張量。tf.nn.conv2d完成捲積運算。捲積核(kernel),權值、濾波器、捲積矩陣或模版,filter。權值訓練習得。捲積核(filter參數)權值數量決定需要學習捲積核數量。通道,電腦器視覺,描述輸出向量。RGB圖像,3個代表秩1張量[red,green,blue]通道。輸出與input_batch同秩張量,與捲積核維數相同。兩個張量捲積生成特征圖(feature map)。特征圖為輸出添加新層代表張量捲積。訪問輸入批數據和特征圖元素用相同索引,可瞭解輸入與kernel捲積運算值變化。層,輸出新維度。

電腦視覺捲積價值,修改捲積核strides(跨度)參數實現輸入降維。strides參數使捲積核無需遍歷每個輸入元素,跳過部分圖像像素。kernel在input_batch滑動,跨過部分元素,每次移動以input_batch一個元素為中心。位置重疊值相乘,乘積相加,得捲積結果。逐點相乘,整合兩個輸入。設置跨度,調整輸入張量維數。降維減少運算量,避免重疊感受域。strides參數格式與輸入向量相同(image_batch_size_stride、image_height_stride、image_width_stride、image_channels_stride)。

邊界填充,捲積核與圖像尺寸不匹配,填充圖像缺失區域。TensorFlow用0填充。padding參數控制conv2d零填充數或錯誤狀態。SAME:捲積輸出輸入尺寸相同,不考慮濾波器尺寸,缺失像素填充0,捲積核掃像素數大於圖像實際像素數。VALID:考慮濾波器尺寸。儘量不越過圖像邊界,也可能邊界被填充。

data_format修改數據格式。NHWC指定輸入輸出數據格式,[batch_size(批數據張量數)、in_height(批數據張量高度)、in_width(批數據張量寬度)、in_channels(批數據張量通道數)]。NCHW指定輸入輸出數據格式,[batch_size、in_channels、in_height、in_width]。

TensorFlow濾波器參數指定輸入捲積運算捲積核。濾波器使用特定模式突出圖像中感興趣特征。圖像與邊緣檢測捲積核的捲積輸出是所有檢測邊緣區域。tf.minimum和tf.nn.relu使捲積值保持在RGB顏色值合法範圍[0,255]內。捲積核初值隨機設定,訓練迭代,值由CNN學習層自動調整,訓練一迭代,接收圖像,與捲積核捲積,預測結果與圖像真實標簽是否一致,調整捲積核。

 

    import tensorflow as tf
    input_batch = tf.constant([
            [#第1個輸入
                [[0.0],[1.0]],
                [[2.0],[3.0]]
            ],
            [#第2個輸入
                [[2.0],[4.0]],
                [[6.0],[8.0]]
            ]
        ])
    print input_batch
    kernel = tf.constant([
            [
                [[1.0, 2.0]]
            ]
        ])
    print kernel
    conv2d = tf.nn.conv2d(input_batch, kernel, strides=[1, 1, 1, 1], padding='SAME')#conv2d捲積運算
    print conv2d
    sess = tf.Session()
    print sess.run(conv2d)
    lower_right_image_pixel = sess.run(input_batch)[0][1][1]
    lower_right_kernel_pixel = sess.run(conv2d)[0][1][1]
    print lower_right_image_pixel, lower_right_kernel_pixel
    input_batch2 = tf.constant([
            [#第1個輸入(6x6x1)
                [[0.0],[1.0],[2.0],[3.0],[4.0],[5.0]],
                [[0.1],[1.1],[2.1],[3.1],[4.1],[5.1]],
                [[0.2],[1.2],[2.2],[3.2],[4.2],[5.2]],
                [[0.3],[1.3],[2.3],[3.3],[4.3],[5.3]],
                [[0.4],[1.4],[2.4],[3.4],[4.4],[5.4]],
                [[0.5],[1.5],[2.5],[3.5],[4.5],[5.5]]
            ]
        ])
    print input_batch2
    kernel2 = tf.constant([#捲積核(3x3x1)
            [[[0.0]], [[0.5]], [[0.0]]],
            [[[0.0]], [[1.0]], [[0.0]]],
            [[[0.0]], [[0.5]], [[0.0]]]
        ])
    print kernel2
    conv2d2 = tf.nn.conv2d(input_batch2, kernel2, strides=[1, 3, 3, 1], padding='SAME')
    print conv2d2
    print sess.run(conv2d2)
    lower_right_image_pixel2 = sess.run(input_batch2)[0][1][1]
    lower_right_kernel_pixel2 = sess.run(conv2d2)[0][1][1]
    print lower_right_image_pixel2, lower_right_kernel_pixel2
    input_batch3 = tf.constant([
            [#第1個輸入(6x6x1)
                [[0.0,1.0,2.0],[1.0,2.0,3.0]],
                [[0.1,1.1,2.1],[1.1,2.1,3.1]],
                [[0.2,1.2,2.2],[1.2,2.2,3.2]],
                [[0.3,1.3,2.3],[1.3,2.3,3.3]],
                [[0.4,1.4,2.4],[1.4,2.4,3.4]],
                [[0.5,1.5,2.5],[1.5,2.5,3.5]]
            ]
        ])
    print input_batch3
    kernel3 = tf.constant([
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[8., 0., 0.],[0., 8., 0.],[0., 0., 8.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ]
        ])
    print kernel3
    conv2d3 = tf.nn.conv2d(input_batch3, kernel3, strides=[1, 1, 1, 1], padding='SAME')
    print conv2d3
    activation_map3 = sess.run(tf.minimum(tf.nn.relu(conv2d3), 255))
    print activation_map3
    lower_right_image_pixel3 = sess.run(input_batch3)[0][1][1]
    lower_right_kernel_pixel3 = sess.run(conv2d3)[0][1][1]
    print lower_right_image_pixel3, lower_right_kernel_pixel3
    kernel4 = tf.constant([
            [
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
            ],
            [
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[5., 0., 0.],[0., 5., 0.],[0., 0., 5.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]]
            ],
            [
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]],
                [[-1., 0., 0.],[0., -1., 0.],[0., 0., -1.]],
                [[0., 0., 0.],[0., 0., 0.],[0., 0., 0.]]
            ]
        ])
    print kernel4
    conv2d4 = tf.nn.conv2d(input_batch3, kernel4, strides=[1, 1, 1, 1], padding='SAME')
    print conv2d4
    activation_map4 = sess.run(tf.minimum(tf.nn.relu(conv2d4), 255))
    print activation_map4
    lower_right_image_pixel4 = sess.run(input_batch3)[0][1][1]
    lower_right_kernel_pixel4 = sess.run(conv2d4)[0][1][1]
    print lower_right_image_pixel4, lower_right_kernel_pixel4

 


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

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


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

-Advertisement-
Play Games
更多相關文章
  • 1. 新建一個配置文件log4net.config,配置方法同成web.config或app.config一致; <?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="log4net ...
  • 簡言 本人在博客園註冊也2年多了,一直沒有寫自己的博客,因為才疏學淺一直跟著園子里的大哥們學習這.net技術。一年之前跳槽到現在的公司工作,由於公司沒有自己一套的開發框架,每次都要重新搭建,於是本人就用業餘時間寫了一個簡單開發框架,我也不知道叫“框架”是否符合,大家對付著看吧,希望可以幫助一些新人學 ...
  • using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;u ...
  • 簡介 RabbitMQ是用erlang開發的,集群非常方便,因為erlang天生就是一門分散式語言,但其本身並不支持負載均衡。 Rabbit模式大概分為以下三種:單一模式、普通模式、鏡像模式 RabbitMQ工作模式 單一模式 (最簡單的情況,非集群模式) 普通模式 (預設的集群模式) 流程 對於Q ...
  • 原創聲明:本文為本人原創作品,絕非他處摘取,轉載請聯繫博主 相信大家在各大網站都會遇到,登錄時,在登錄框出現下次免登陸/一個月免登陸的類似選項,本次博文就是講解如何實現,在這記錄一下,也算是做個備忘錄合集,如果文中有錯,歡迎大家指出 為啥說自登陸一次呢,因為當訪問某個頁面時,如果第一次自動登錄失敗時 ...
  • 根據 autowire 的配置選擇裝配策略 byName 選擇和屬性名 name 一致的 bean 進行裝配; byType 根據類型選擇,如果對應的類型匹配到多個bean,則會報錯,如下配置: 報錯: 還能配置在 beans 標簽下,設置整個配置文件的裝配策略,裡面的值也是那幾個配置。 代碼鏈接: ...
  • 回顧大二的數據結構知識。從數組開始。實現了一個可自動擴充容量的泛型數組。 頭文件:Array.h 實現:Array.cpp ...
  • 1.什麼是JSTL JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。 JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標簽,SQL標簽。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。 根據JSTL標簽所提供的功能,可以將 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...