首页 > 解决方案 > TypeError: __init__() 为参数 'kernel_size' 获得了多个值

问题描述

执行程序时出现以下错误...

def conv2d(x, output_dim, k_size=5, stride=2, stddev=0.02, name="conv2d"):
    #conv = tf.keras.layers.Conv2D(x, output_dim, kernel_size=k_size, 
                                   strides=[stride, stride], padding="SAME", 
                                   kernel_initializer=init(stddev=0.02), name=name)
    conv = tf.compat.v1.layers.Conv2D(x, output_dim, kernel_size=k_size, 
                                      strides=[stride, stride], padding='SAME', 
                                      kernel_initializer=init(stddev=0.02), name=name)

错误

文件“/nfs/s-iibi54/users/skuanar/Downloads/VAE-GAN-Autoencoding-Beyond-Pixels-Using-a-Similarity-Metric-master/vaegan.py”,第 20 行,在 conv2d conv = tf.compat .v1.layers.Conv2D(x, output_dim, kernel_size=k_size, strides=[stride, stride], padding='SAME', kernel_initializer=init(stddev=0.02), name=name) TypeError: init() got multiple values对于参数'kernel_size'

标签: tensorflowkeraskeras-layertensorflow2.0tf.keras

解决方案


您正在传递x给图层的__init__方法。这不是 Keras 层的工作方式。

您应该通过x调用已经存在的层来传递:

def conv2d(x, output_dim, k_size=5, stride=2, stddev=0.02, name="conv2d"):
    #conv = tf.keras.layers.Conv2D(output_dim, kernel_size=k_size, 
                                   strides=[stride, stride], padding="SAME", 
                                   kernel_initializer=init(stddev=0.02), name=name)(x)
    conv_output = tf.compat.v1.layers.Conv2D(output_dim, kernel_size=k_size, 
                                      strides=[stride, stride], padding='SAME', 
                                      kernel_initializer=init(stddev=0.02), name=name)(x)

假设x是您的输入张量。


这与以下内容相同:

conv_layer = Conv2D(output_dim, kernel_size=k_size, 
                    strides=[stride, stride], padding="SAME", 
                    kernel_initializer=init(stddev=0.02), name=name)
conv_layer_output_tensor = conv_layer(x)

推荐阅读