最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TensorFlow tf.nn.conv2d_transpose是怎樣實(shí)現(xiàn)反卷積的

 更新時(shí)間:2020年04月20日 11:31:57   作者:xf__mao  
這篇文章主要介紹了TensorFlow tf.nn.conv2d_transpose是怎樣實(shí)現(xiàn)反卷積的,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

今天來(lái)介紹一下Tensorflow里面的反卷積操作,網(wǎng)上反卷積的用法的介紹比較少,希望這篇教程可以幫助到各位

反卷積出自這篇論文:Deconvolutional Networks,有興趣的同學(xué)自行了解

首先無(wú)論你如何理解反卷積,請(qǐng)時(shí)刻記住一點(diǎn),反卷積操作是卷積的反向

如果你隨時(shí)都記住上面強(qiáng)調(diào)的重點(diǎn),那你基本就理解一大半了,接下來(lái)通過(guò)一些函數(shù)的介紹為大家強(qiáng)化這個(gè)觀念

conv2d_transpose(value, filter, output_shape, strides, padding="SAME", data_format="NHWC", name=None)

除去name參數(shù)用以指定該操作的name,與方法有關(guān)的一共六個(gè)參數(shù):
第一個(gè)參數(shù)value:指需要做反卷積的輸入圖像,它要求是一個(gè)Tensor
第二個(gè)參數(shù)filter:卷積核,它要求是一個(gè)Tensor,具有[filter_height, filter_width, out_channels, in_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,卷積核個(gè)數(shù),圖像通道數(shù)]
第三個(gè)參數(shù)output_shape:反卷積操作輸出的shape,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)卷積操作是沒有這個(gè)參數(shù)的,那這個(gè)參數(shù)在這里有什么用呢?下面會(huì)解釋這個(gè)問(wèn)題
第四個(gè)參數(shù)strides:反卷積時(shí)在圖像每一維的步長(zhǎng),這是一個(gè)一維的向量,長(zhǎng)度4
第五個(gè)參數(shù)padding:string類型的量,只能是"SAME","VALID"其中之一,這個(gè)值決定了不同的卷積方式
第六個(gè)參數(shù)data_format:string類型的量,'NHWC'和'NCHW'其中之一,這是tensorflow新版本中新加的參數(shù),它說(shuō)明了value參數(shù)的數(shù)據(jù)格式。'NHWC'指tensorflow標(biāo)準(zhǔn)的數(shù)據(jù)格式[batch, height, width, in_channels],'NCHW'指Theano的數(shù)據(jù)格式,[batch, in_channels,height, width],當(dāng)然默認(rèn)值是'NHWC'

開始之前務(wù)必了解卷積的過(guò)程,參考我的另一篇文章:http://www.fzitv.net/article/177798.htm

首先定義一個(gè)單通道圖和3個(gè)卷積核

x1 = tf.constant(1.0, shape=[1,3,3,1])
kernel = tf.constant(1.0, shape=[3,3,3,1])

先別著急!我們不直接用反卷積函數(shù),而是再定義一些圖

x2 = tf.constant(1.0, shape=[1,6,6,3])
x3 = tf.constant(1.0, shape=[1,5,5,3])

x2是6×6的3通道圖,x3是5×5的3通道圖
好了,接下來(lái)對(duì)x3做一次卷積操作

y2 = tf.nn.conv2d(x3, kernel, strides=[1,2,2,1], padding="SAME")

所以返回的y2是一個(gè)單通道的圖,如果你了解卷積過(guò)程,很容易看出來(lái)y2是[1,3,3,1]的Tensor,y2的結(jié)果如下:

[[[[ 12.]
  [ 18.]
  [ 12.]]
 
 [[ 18.]
  [ 27.]
  [ 18.]]
 
 [[ 12.]
  [ 18.]
  [ 12.]]]]

又一個(gè)很重要的部分!tf.nn.conv2d中的filter參數(shù),是[filter_height, filter_width, in_channels, out_channels]的形式,而tf.nn.conv2d_transpose中的filter參數(shù),是[filter_height, filter_width, out_channels,in_channels]的形式,注意in_channels和out_channels反過(guò)來(lái)了!因?yàn)閮烧呋榉聪?,所以輸入輸出要調(diào)換位置

既然y2是卷積操作的返回值,那我們當(dāng)然可以對(duì)它做反卷積,反卷積操作返回的Tensor,應(yīng)該和x3的shape是一樣的(不難理解,因?yàn)槭蔷矸e的反過(guò)程)

y3 = tf.nn.conv2d_transpose(y2,kernel,output_shape=[1,5,5,3], strides=[1,2,2,1],padding="SAME")

好,現(xiàn)在返回的y3果然是[1,5,5,3]的Tensor,結(jié)果如下:

[[[[ 12. 12. 12.]
  [ 30. 30. 30.]
  [ 18. 18. 18.]
  [ 30. 30. 30.]
  [ 12. 12. 12.]]
 
 [[ 30. 30. 30.]
  [ 75. 75. 75.]
  [ 45. 45. 45.]
  [ 75. 75. 75.]
  [ 30. 30. 30.]]
 
 [[ 18. 18. 18.]
  [ 45. 45. 45.]
  [ 27. 27. 27.]
  [ 45. 45. 45.]
  [ 18. 18. 18.]]
 
 [[ 30. 30. 30.]
  [ 75. 75. 75.]
  [ 45. 45. 45.]
  [ 75. 75. 75.]
  [ 30. 30. 30.]]
 
 [[ 12. 12. 12.]
  [ 30. 30. 30.]
  [ 18. 18. 18.]
  [ 30. 30. 30.]
  [ 12. 12. 12.]]]]

這個(gè)結(jié)果是怎么得來(lái)的?可以用一張動(dòng)圖來(lái)說(shuō)明,圖片來(lái)源:反卷積的真正含義


看起來(lái),tf.nn.conv2d_transpose的output_shape似乎是多余的,因?yàn)橹懒嗽瓐D,卷積核,步長(zhǎng)顯然是可以推出輸出圖像大小的,那為什么要指定output_shape呢?
看這樣一種情況:

y4 = tf.nn.conv2d(x2, kernel, strides=[1,2,2,1], padding="SAME")

我們把上面的x2也做卷積,獲得shape為[1,3,3,1]的y4如下:

[[[[ 27.]
  [ 27.]
  [ 18.]]
 
 [[ 27.]
  [ 27.]
  [ 18.]]
 
 [[ 18.]
  [ 18.]
  [ 12.]]]]

[1,6,6,3]和[1,5,5,3]的圖經(jīng)過(guò)卷積得到了相同的大小,[1,3,3,1]
讓我們?cè)俜催^(guò)來(lái)看,那么[1,3,3,1]的圖反卷積后得到什么呢?產(chǎn)生了兩種情況。所以這里指定output_shape是有意義的,當(dāng)然隨意指定output_shape是不允許的,如下情況程序會(huì)報(bào)錯(cuò):

y5 = tf.nn.conv2d_transpose(x1,kernel,output_shape=[1,10,10,3],strides=[1,2,2,1],padding="SAME")

以上是stride為2的情況,為1時(shí)也類似,當(dāng)卷積核大于原圖時(shí),默認(rèn)用VALID方式(用SAME就無(wú)意義了)參考下圖:

程序清單:

import tensorflow as tf
 
x1 = tf.constant(1.0, shape=[1,3,3,1])
 
x2 = tf.constant(1.0, shape=[1,6,6,3])
 
x3 = tf.constant(1.0, shape=[1,5,5,3])
 
kernel = tf.constant(1.0, shape=[3,3,3,1])
 
 
 
y1 = tf.nn.conv2d_transpose(x1,kernel,output_shape=[1,6,6,3],
  strides=[1,2,2,1],padding="SAME")
 
y2 = tf.nn.conv2d(x3, kernel, strides=[1,2,2,1], padding="SAME")
 
y3 = tf.nn.conv2d_transpose(y2,kernel,output_shape=[1,5,5,3],
  strides=[1,2,2,1],padding="SAME")
 
y4 = tf.nn.conv2d(x2, kernel, strides=[1,2,2,1], padding="SAME")
 
'''
Wrong!!This is impossible
y5 = tf.nn.conv2d_transpose(x1,kernel,output_shape=[1,10,10,3],strides=[1,2,2,1],padding="SAME")
'''
sess = tf.Session()
tf.global_variables_initializer().run(session=sess)
x1_decov, x3_cov, y2_decov, x2_cov=sess.run([y1,y2,y3,y4])
print(x1_decov.shape)
print(x3_cov.shape)
print(y2_decov.shape)
print(x2_cov.shape)

到此這篇關(guān)于TensorFlow tf.nn.conv2d_transpose是怎樣實(shí)現(xiàn)反卷積的 的文章就介紹到這了,更多相關(guān)TensorFlow tf.nn.conv2d_transpose 反卷積內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?pandas的八個(gè)生命周期總結(jié)

    Python?pandas的八個(gè)生命周期總結(jié)

    這篇文章主要從八個(gè)pandas的數(shù)據(jù)處理生命周期,整理匯總出pandas框架在整個(gè)數(shù)據(jù)處理過(guò)程中都是如何處理數(shù)據(jù)的,感興趣的小伙伴可以了解一下
    2022-10-10
  • 詳解Python網(wǎng)絡(luò)框架Django和Scrapy安裝指南

    詳解Python網(wǎng)絡(luò)框架Django和Scrapy安裝指南

    這篇文章主要介紹了詳解Python網(wǎng)絡(luò)框架Django和Scrapy安裝指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • Python利用wxPython實(shí)現(xiàn)長(zhǎng)文本處理

    Python利用wxPython實(shí)現(xiàn)長(zhǎng)文本處理

    這篇文章主要為大家詳細(xì)介紹了Python如何利用wxPython實(shí)現(xiàn)長(zhǎng)文本處理功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • Appium+Python自動(dòng)化環(huán)境搭建實(shí)例教程

    Appium+Python自動(dòng)化環(huán)境搭建實(shí)例教程

    這篇文章主要介紹了Appium+Python自動(dòng)化環(huán)境搭建實(shí)例教程,本文通過(guò)實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 利用Django框架中select_related和prefetch_related函數(shù)對(duì)數(shù)據(jù)庫(kù)查詢優(yōu)化

    利用Django框架中select_related和prefetch_related函數(shù)對(duì)數(shù)據(jù)庫(kù)查詢優(yōu)化

    這篇文章主要介紹了利用Python的Django框架中select_related和prefetch_related函數(shù)對(duì)數(shù)據(jù)庫(kù)查詢的優(yōu)化的一個(gè)實(shí)踐例子,展示如何在實(shí)際中利用這兩個(gè)函數(shù)減少對(duì)數(shù)據(jù)庫(kù)的查詢次數(shù),需要的朋友可以參考下
    2015-04-04
  • python 安裝庫(kù)幾種方法之cmd,anaconda,pycharm詳解

    python 安裝庫(kù)幾種方法之cmd,anaconda,pycharm詳解

    在python項(xiàng)目開發(fā)的過(guò)程中,需要安裝大大小小的庫(kù),本文會(huì)提供幾種安裝庫(kù)的方法,通過(guò)實(shí)例截圖給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2020-04-04
  • python獲得一個(gè)月有多少天的方法

    python獲得一個(gè)月有多少天的方法

    這篇文章主要介紹了python獲得一個(gè)月有多少天的方法,涉及Python中datetime模塊操作日期的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python實(shí)現(xiàn)subprocess執(zhí)行外部命令

    Python實(shí)現(xiàn)subprocess執(zhí)行外部命令

    Python使用最廣泛的是標(biāo)準(zhǔn)庫(kù)的subprocess模塊,使用subprocess最簡(jiǎn)單的方式就是用它提供的便利函數(shù),因此執(zhí)行外部命令優(yōu)先使用subprocess模塊,下面就一起來(lái)了解一下如何使用
    2021-05-05
  • 15行Python代碼帶你輕松理解令牌桶算法

    15行Python代碼帶你輕松理解令牌桶算法

    這篇文章主要介紹了15行Python代碼帶你輕松理解令牌桶算法,需要的朋友可以參考下
    2018-03-03
  • Python編程學(xué)習(xí)之如何判斷3個(gè)數(shù)的大小

    Python編程學(xué)習(xí)之如何判斷3個(gè)數(shù)的大小

    這篇文章主要給大家介紹了關(guān)于Python編程學(xué)習(xí)之如何判斷3個(gè)數(shù)的大小的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

雷波县| 大丰市| 新昌县| 哈尔滨市| 塘沽区| 苍南县| 明溪县| 弥渡县| 东乌珠穆沁旗| 灵川县| 手游| 浦城县| 丰城市| 黑河市| 开化县| 玉环县| 黔东| 应用必备| 襄垣县| 桑日县| 芜湖县| 乌恰县| 洛南县| 长沙市| 海门市| 甘德县| 荣成市| 怀来县| 湘阴县| 武清区| 射洪县| 光山县| 淳化县| 绍兴县| 雅江县| 左权县| 金乡县| 辽阳县| 江口县| 山西省| 突泉县|