调用 SubpixelConv2D 函数时"ValueError: None values not supported"



我正在尝试使用SubpixelConv2D函数

我正在训练一个 GAN,并希望使用子像素而不是插值或卷积转置来增加样本,因为它们留下了伪影。

我正在使用Tensorflow/1.4.0和Keras/2.2.4

当我尝试调用该函数时,我收到以下错误:

"值错误:不支持无值。">

我使用以下方法调用该函数:

import tensorflow as tf
from tensorflow import keras
import Utils
def up_sampling_block(model):
    #model = keras.layers.Conv2DTranspose(filters = filters, kernel_size = kernal_size, strides = strides, padding = "same")(model)
    model = Utils.SubpixelConv2D(model)(model)
    #model = keras.layers.UpSampling2D(size = 2)(model)
    #model = keras.layers.Conv2D(filters = filters, kernel_size = kernal_size, strides = strides, padding = "same")(model)
    #model = keras.layers.LeakyReLU(alpha = 0.2)(model)
    return model

函数如下:

# Subpixel Conv will upsample from (h, w, c) to (h/r, w/r, c/r^2)
def SubpixelConv2D(input_shape, scale=4):
    def subpixel_shape(input_shape, scale):
        dims = [input_shape[0], input_shape[1] * scale, input_shape[2] * scale, int(input_shape[3] / (scale ** 2))]             
        output_shape = tuple(dims)
        return output_shape
    def subpixel(x):
        return tf.depth_to_space(x, scale)
    return keras.layers.Lambda(subpixel, subpixel_shape)

输入张量的大小为 (?,48,48,64(,我相信批量大小的"?"导致了错误,但我似乎无法解决问题。

Lambda 层的第二个函数必须只是输入形状的函数:subpixel_shape(input_shape)但你采用第二个称为 scale 的参数,当只传递 input_shape 时默认为 undefined。尝试改为将lambda input_shape: subpixel_shape(input_shape, scale)传递给keras.layers.Lambda函数。然后,比例将默认为 4,如外部函数所示。或者从subpixel_shape函数参数中删除scale

def outer(a=0):
    def inner():
        print(a)
    return inner
print(outer()()) # prints 0

最新更新