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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习 tensorflow tf.layers.conv2d_transpose 反卷积 上采样

發布時間:2025/3/21 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习 tensorflow tf.layers.conv2d_transpose 反卷积 上采样 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參數

conv2d_transpose( inputs, filters, kernel_size, strides=(1, 1), padding=’valid’, data_format=’channels_last’, activation=None, use_bias=True, kernel_initializer=None, bias_initializer=tf.zeros_initializer(), kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None, trainable=True, name=None, reuse=None )

比較關注的參數:

  • inputs: 輸入的張量
  • filters: 輸出卷積核的數量
  • kernel_size : 在卷積操作中卷積核的大小
  • strides: (不太理解,我直接理解成放大的倍數)
  • padding : ‘valid’ 或者 ‘same’。

觀察之后看到,補0?過程分為兩個部分:元素之間和外輪廓

1 、當padding = ‘valid’時:

? ? ?元素之間補0:(input_size - 1)×(strides - 1)

? ? ?外輪廓補0:(kernel_size - 1)× 2

? ? ?output_size = (input_size? + (input_size - 1)×(strides - 1) +(kernel_size - 1)× 2 - kernel_size ) / 1 + 1

2、當padding = ‘same’時:

? ? ?output_size = input_size × strides

? ? ?他是通過調整外輪廓的補0 數量實現的,如果不夠,我個人覺得可能元素之間補0也會減少

img = np.random.randint(0, 255, (5, 16, 16, 32)).astype(np.float32) img_t = tf.constant(img, tf.float32)transpose_v = tf.layers.conv2d_transpose(inputs=img_t, filters=16, kernel_size=(6, 6), strides=(2, 2), padding='valid') transpose_s = tf.layers.conv2d_transpose(inputs=img_t, filters=16, kernel_size=(6, 6), strides=(2, 2), padding='same') print('valid 輸出尺寸:', transpose_v.shape) print('same 輸出尺寸: ', transpose_s.shape)valid 輸出尺寸: (5, 36, 36, 16) same 輸出尺寸: (5, 32, 32, 16)

反卷積的過程

  • Step 1 擴充: 將?inputs?進行填充擴大。擴大的倍數與strides有關。擴大的方式是在元素之間插strides - 1?個?0
  • Step 2 卷積: 對擴充變大的矩陣,用大小為kernel_size卷積核做卷積操作,這樣的卷積核有filters個,并且這里的步長為1(與參數strides無關,一定是1)

舉個例子:

  • inputs:[ [1, 1], [2,2] ]
  • strides = 2(擴大2倍)
  • filters = 1
  • kernel_size = 3(假設核的值都是1)
  • padding = ‘same’

Step 1:[2,2] 擴大至 [4,4]

  • 問題描述:一個矩陣XX,通過 3*3 大小的卷積核,以 ‘same’的padding形式,步長為2做卷積,得到 [[1,1],[2,2]],問XX長啥樣


    通過填充,讓原來2*2的矩陣變成4*4。填充的方式是我自己根據代碼給出的結果猜的,大概就是先在元素之間插strides - 1個0,然后在填充邊緣使矩陣達到目標尺寸。
    目標尺寸可以根據下面的公式來求:


    其中?x為目標尺寸,k是卷積核的尺寸,?p表示填充的個數,?o表示輸出的尺寸,s表示步長。
    在這里,k,p,s,o都是已知的,求x即可。但是因為有取整操作,實際上會有兩個值符合x,似乎是取大的那個。
    在這個例子中k=3,p=1,s=2,o=2,得到x=4或x=3或x=3,取大的那個,所以x=4

Step 2 : 做卷積,卷積核大小3*3, 步長為1


這一步就是普通的做卷積操作。

?

代碼驗證

a = np.array([[1,1],[2,2]], dtype=np.float32) # [[1,1], # [2,2]]# tf.layers.conv2d_transpose 要求輸入是4維的 a = np.reshape(a, [1,2,2,1])# 定義輸入 x = tf.constant(a,dtype=tf.float32) # 進行tf.layers.conv2d_transpose upsample_x = tf.layers.conv2d_transpose(x, 1, 3, strides=2, padding='same', kernel_initializer=tf.ones_initializer()) with tf.Session() as sess:tf.global_variables_initializer().run()print(sess.run(upsample_x))# [[[[1],[1],[2],[1]],# [[1],[1],[2],[1]],# [[3],[3],[6],[3]],# [[2],[2],[4],[2]]]]

?

總結

以上是生活随笔為你收集整理的深度学习 tensorflow tf.layers.conv2d_transpose 反卷积 上采样的全部內容,希望文章能夠幫你解決所遇到的問題。

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