我有一台CNN,它能产生6个通道的32x32图像,但我需要将其上采样到256x256。我在做:
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
然后我像这样传递这一层:
up_stack = [
upsample(6, 3), # x2
upsample(6, 3), # x2
upsample(6, 3) # x2
]
for up in up_stack:
finalLayer = up(finalLayer)
但是这种设置会产生不准确的结果。我有什么地方做错了吗?
发布于 2020-07-16 16:43:44
你的另一个选择是为了你的目的使用tf.keras.layers.UpSampling2D
,但这不会学习一个内核来进行上采样(它使用双线性上采样)。
所以,你的方法是正确的。但是,您已经将kernel_size
用作3x3。
它应该是2x2,如果您对结果不满意,您应该将过滤器的数量从32,256增加。
发布于 2020-07-16 17:12:18
如果您希望使用up-convolution
,我将建议您执行以下操作来实现您想要的效果。按照代码运行,只需根据需要更改filter
即可。
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
_________________________________________________________________
https://stackoverflow.com/questions/62938681
复制