學習筆記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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...