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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

caffe与tensorflow框架下卷积的维度计算与一致性证明

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 caffe与tensorflow框架下卷积的维度计算与一致性证明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??對于卷積運算,假設輸入維度為iii,卷積核的維度為www,步長為sss,這里為了敘述方便僅描述一維且忽略pad(pad可以看做已經乘以2加到輸入維度中去了)。在caffe框架下,按照平移的原則一步步算卷積,如果最后還剩下若干個不夠卷積核大小的數,則直接被拋棄,因此卷積的輸出維度為:

out = ?i?ws?\lfloor\frac{i-w}{s}\rfloor?si?w??+1

??而在tensorflow中卷積的運算與padding的設置有關,這里順便提一下tensorflow中padding=same和valid對應的計算方法。padding=valid時,其計算方法和caffe一樣,也是從頭開始卷積,卷到最右邊或者最下邊時有多余的不夠一個卷積核大小的多余數據時直接扔掉。之前看一些博客中寫到,此時輸出維度的計算方法為:

out = ?i?w+1s?\lceil{\frac{i-w+1}{s}\rceil}?si?w+1??

上面兩個式子是相等的,只是兩種不同的寫法而已,這里簡單給個證明。

?i?ws?\lfloor\frac{i-w}{s}\rfloor?si?w??+1 = ?i?w+1s?\lceil{\frac{i-w+1}{s}\rceil}?si?w+1??

分以下幾種情況:

  • sss=1時,等式顯然成立。
  • sss!=1時,再分兩種情況:
    2.1:當i?ws\frac{i-w}{s}si?w?為整數時,即i?ws\frac{i-w}{s}si?w?=aaai?w+1s{\frac{i-w+1}{s}}si?w+1?=a+1s∈(a,a+1)??i?w+1s?a+\frac{1}{s}\in(a,a+1)\Rightarrow\lceil{\frac{i-w+1}{s}\rceil}a+s1?(a,a+1)??si?w+1??=a+1a+1a+1,等式兩邊均為a+1a+1a+1,等式成立。
    2.2:當i?ws\frac{i-w}{s}si?w?不為整數時,即i?ws\frac{i-w}{s}si?w?=a+mna+\frac{m}{n}a+nm?,其中mn\frac{m}{n}nm?為不可約的真分數。
    ~對于等式左邊,由于m,nm,nm,n均為正整數,所以有m+1≤nm+1\le{n}m+1n,則等式左邊的值為a+1a+1a+1
    ~對于等式右邊,顯然有?i?w+1s?=?a+mn+1s?≥a+1\lceil{\frac{i-w+1}{s}\rceil}=\lceil{a+\frac{m}{n}+\frac{1}{s}\rceil}\ge{a+1}?si?w+1??=?a+nm?+s1??a+1。欲證等式成立,僅需證明
    ?i?w+1s?=?a+mn+1s?≤a+1\lceil{\frac{i-w+1}{s}\rceil}=\lceil{a+\frac{m}{n}+\frac{1}{s}\rceil}\le{a+1}?si?w+1??=?a+nm?+s1??a+1。僅需證明mn+1s≤1\frac{m}{n}+\frac{1}{s}\le{1}nm?+s1?1
    i?ws\frac{i-w}{s}si?w?=a+mn=as+s′s=a+s′s?mn=s′sa+\frac{m}{n}=\frac{as+s'}{s}=a+\frac{s'}{s}\Rightarrow\frac{m}{n}=\frac{s'}{s}a+nm?=sas+s?=a+ss??nm?=ss?,由于mn\frac{m}{n}nm?為不可約分數,而s′s\frac{s'}{s}ss?卻不一定是不可約的,有s′=km,s=kns'=km,s=kns=kms=kn,其中kkk為正整數,最小為1,即s=kn≥ns=kn\ge{n}s=knn
    mn+1s≤mn+1n=m+1n≤1(m+1≤n)\frac{m}{n}+\frac{1}{s}\le{\frac{m}{n}+\frac{1}{n}}=\frac{m+1}{n}\le{1}(m+1\le{n})nm?+s1?nm?+n1?=nm+1?1(m+1n),即證明了?i?w+1s?≥a+1\lceil{\frac{i-w+1}{s}\rceil}\ge{a+1}?si?w+1??a+1?i?w+1s?≤a+1\lceil{\frac{i-w+1}{s}\rceil}\le{a+1}?si?w+1??a+1,則?i?w+1s?=a+1\lceil{\frac{i-w+1}{s}\rceil}={a+1}?si?w+1??=a+1,等式成立。
  • 結論:caffe的卷積維度和tensorflow的padding=valid時的conv2d維度計算方法是一樣的。而當padding=same時,輸出的維度

    out = ?is?\lceil{\frac{i}{s}}\rceil?si??

    當輸入的維度不夠湊足運算所需要的數值時,會自動做zero-padding,需要注意的是,zero-padding時是按照左右或上下對稱的方式進行的,當出現奇數時,右邊或者下邊會多padding出一行或一列。另外,tensorflow也提供了padding的函數,用戶可以顯式的手動去選擇在哪里做多少padding,然后再結合conv2d中的valid或same參數,就可以實現任意輸出維度的卷積了。
    ??caffe里面的pooling層維度計算和convolution不完全一樣.pooling層輸出的維度中,當最后還剩下幾個數據不夠一個kernel的大小時,convolution的做法是拋棄這些數據,相當于向下取整.而pooling層有一個round_mode可以設置是向上取整還是向下取整,默認是向上取整的.如果pooling中的round_mode設置為向下取整,那多余的那些數據依然被拋棄;如果設置為向上取整,在最后一次kernel對應的pooling運算中,還剩下幾個數據,就從那幾個數據中按照pooling的方式(max?average?min?)去算結果.比如max_pooling的kernel_size是3,可是最后只剩下2個數了且round_mode設置為CEIL,那就從剩下的兩個數里選max作為pooling結果.emmmm,感覺caffe還是比較粗糙啊,難怪很多model從caffe轉到tensorflow之后inference結果都有或多或少的差別…

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的caffe与tensorflow框架下卷积的维度计算与一致性证明的全部內容,希望文章能夠幫你解決所遇到的問題。

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