Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python keras/tensorflow需要向占位符提供不必要的值_Python_Machine Learning_Tensorflow_Keras - Fatal编程技术网

Python keras/tensorflow需要向占位符提供不必要的值

Python keras/tensorflow需要向占位符提供不必要的值,python,machine-learning,tensorflow,keras,Python,Machine Learning,Tensorflow,Keras,我正在使用Keras和TF后端。最近,在使用函数API创建“混合”模型时,我觉得Keras需要我提供它不需要的值 作为背景,我试图在Keras中实现一个条件GAN。我的实现有一个生成器和一个鉴别器。例如,生成器接受(20,20,1)输入并返回(20,20,1)输出。它们按通道堆叠,以产生(20,20,2)输入到鉴别器。鉴别器应该决定它是看到原始(20,20,1)图像的地面真值翻译还是生成器的翻译。这表示为0=假,1=真 鉴别器本身只是用于二元分类的CNN。因此,它可以通过在{0,1}中输入形状(

我正在使用Keras和TF后端。最近,在使用函数API创建“混合”模型时,我觉得Keras需要我提供它不需要的值

作为背景,我试图在Keras中实现一个条件GAN。我的实现有一个生成器和一个鉴别器。例如,生成器接受(20,20,1)输入并返回(20,20,1)输出。它们按通道堆叠,以产生(20,20,2)输入到鉴别器。鉴别器应该决定它是看到原始(20,20,1)图像的地面真值翻译还是生成器的翻译。这表示为0=假,1=真

鉴别器本身只是用于二元分类的CNN。因此,它可以通过在{0,1}中输入形状(20,20,2)和输出数据点来训练。因此,如果我写下如下内容:

# <disc> is the discriminator
arbitrary_input = np.full(shape=(5, 20, 20, 2), fill_value=0.5)
arbitrary_labels = np.array([1, 1, 0, 0, 1])
disc.fit(arbitrary_input, arbitrary_labels, epochs=5)
从名称可以看出,这是混合/堆叠模型的输入。我根本没有改变鉴别器,我只是把它包括在另一个模型中。因此disc.fit()应该仍然有效,对吗

我认为可以通过冻结生成器的权重并在整个堆栈上使用fit()来解决问题,但我不明白上面的方法为什么不起作用

这可能是范围界定的问题吗

编辑:鉴别器实际上只是一个简单的CNN。它用
disc=pix2pix\u鉴别器初始化(输入形状=(20,20,2),n\u过滤器=(32,64))
。有关职能是:

def pix2pix_discriminator(input_shape, n_filters, kernel_size=4, strides=2, padding='same', alpha=0.2):
x = Input(shape=input_shape, name='disc_input')

    # first layer
    h = Conv2D(filters=n_filters[0],
               kernel_size=kernel_size,
               strides=strides,
               padding=padding,
               data_format=DATA_FORMAT)(x)
    # no BatchNorm
    h = LeakyReLU(alpha=alpha)(h)

    for i in range(1, len(n_filters)):
        h = Conv2D(filters=n_filters[i],
                   kernel_size=kernel_size,
                   strides=strides,
                   padding=padding,
                   data_format=DATA_FORMAT)(h)
        h = BatchNorm(axis=FEATURES_AXIS)(h)
        h = LeakyReLU(alpha=alpha)(h)

    h_flatten = Flatten()(h)  # required for the upcoming Dense layer
    y_pred = Dense(units=1, activation='sigmoid')(h_flatten)  # binary output

    discriminator = Model(inputs=x, outputs=y_pred)
    discriminator.compile(optimizer='adam',
                          loss='binary_crossentropy',
                          metrics=['accuracy'])
    return discriminator

可以添加初始化/定义光盘的代码行吗?您能否澄清一下,您是否打算向模型提供真实数据?如果是,数据的预期入口点是什么?我看到你用一个常数值为0.5的张量输入任意_。这是有意的吗?它应该是真实的数据吗?我已经编辑了这个问题,以包括鉴别器的架构,尽管我很确定它只是一个CNN。稍后我当然会提供真实数据,但管道应该可以处理真实数据和虚假数据,所以我现在正在使用它进行测试。它不应该是
disc\u output=disc(pair)
InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'stack_input' with dtype float
     [[Node: stack_input = Placeholder[dtype=DT_FLOAT, shape=[], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
def pix2pix_discriminator(input_shape, n_filters, kernel_size=4, strides=2, padding='same', alpha=0.2):
x = Input(shape=input_shape, name='disc_input')

    # first layer
    h = Conv2D(filters=n_filters[0],
               kernel_size=kernel_size,
               strides=strides,
               padding=padding,
               data_format=DATA_FORMAT)(x)
    # no BatchNorm
    h = LeakyReLU(alpha=alpha)(h)

    for i in range(1, len(n_filters)):
        h = Conv2D(filters=n_filters[i],
                   kernel_size=kernel_size,
                   strides=strides,
                   padding=padding,
                   data_format=DATA_FORMAT)(h)
        h = BatchNorm(axis=FEATURES_AXIS)(h)
        h = LeakyReLU(alpha=alpha)(h)

    h_flatten = Flatten()(h)  # required for the upcoming Dense layer
    y_pred = Dense(units=1, activation='sigmoid')(h_flatten)  # binary output

    discriminator = Model(inputs=x, outputs=y_pred)
    discriminator.compile(optimizer='adam',
                          loss='binary_crossentropy',
                          metrics=['accuracy'])
    return discriminator