首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CNN中对[32x32x6]层进行上采样的正确方法是什么

在CNN中对[32x32x6]层进行上采样的正确方法是什么
EN

Stack Overflow用户
提问于 2020-07-16 23:56:21
回答 2查看 471关注 0票数 0

我有一台CNN,它能产生6个通道的32x32图像,但我需要将其上采样到256x256。我在做:

代码语言:javascript
运行
复制
def upsample(filters, size):
  initializer = tf.random_normal_initializer(0., 0.02)

  result = tf.keras.Sequential()
  result.add(tf.keras.layers.Conv2DTranspose(filters, size, strides=2,
                                             padding='same',
                                             kernel_initializer=initializer,
                                             use_bias=False))
  return result

然后我像这样传递这一层:

代码语言:javascript
运行
复制
up_stack = [
upsample(6, 3),  # x2
upsample(6, 3),  # x2
upsample(6, 3)   # x2
]

for up in up_stack:
  finalLayer = up(finalLayer)

但是这种设置会产生不准确的结果。我有什么地方做错了吗?

EN

回答 2

Stack Overflow用户

发布于 2020-07-17 00:43:44

你的另一个选择是为了你的目的使用tf.keras.layers.UpSampling2D,但这不会学习一个内核来进行上采样(它使用双线性上采样)。

所以,你的方法是正确的。但是,您已经将kernel_size用作3x3。

它应该是2x2,如果您对结果不满意,您应该将过滤器的数量从32,256增加。

票数 2
EN

Stack Overflow用户

发布于 2020-07-17 01:12:18

如果您希望使用up-convolution,我将建议您执行以下操作来实现您想要的效果。按照代码运行,只需根据需要更改filter即可。

代码语言:javascript
运行
复制
import tensorflow as tf
from tensorflow.keras import layers

# in = 32x32 out 256x256

inputs = layers.Input(shape=(32, 32, 6))

deconc01 = layers.Conv2DTranspose(256, kernel_size=2, strides=(2, 2), activation='relu')(inputs)
deconc02 = layers.Conv2DTranspose(256, kernel_size=2, strides=(2, 2), activation='relu')(deconc01)
outputs = layers.Conv2DTranspose(256, kernel_size=2, strides=(2, 2), activation='relu')(deconc02)

model = tf.keras.Model(inputs=inputs, outputs=outputs, name="up-conv")

Model: "up-conv"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 32, 32, 6)]       0         
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 64, 64, 256)       6400      
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 128, 128, 256)     262400    
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 256, 256, 256)     262400    
=================================================================
Total params: 531,200
Trainable params: 531,200
Non-trainable params: 0
_________________________________________________________________
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62938681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档