Ошибка: необходимо передать значение в тензор заполнителя после добавления слоев в скомпилированную модель - PullRequest
0 голосов
/ 22 июня 2019

Я работаю над прогрессивно растущей GAN и испытываю проблемы при использовании train_on_batch после добавления слоев в существующую модель. Он хочет, чтобы я передал некоторую ценность тензору-заполнителю

Вот код для создания моделей и добавления слоев

def build_discriminator():
    model = tf.keras.Sequential()

    model.add(layers.Conv2D(128, kernel_size=3, strides=2, input_shape=(7, 7, 128), padding='same'))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU(alpha=0.01))
    assert model.input_shape == (None, 7, 7, 128)
    assert model.output_shape == (None, 4, 4, 128)

    # Output layer with sigmoid activation
    model.add(layers.Flatten())
    model.add(layers.Dense(1, activation='sigmoid'))

    model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy'])

    model.summary()

    return model


def add_layer_disc(discriminator):
    model = tf.keras.Sequential()

    model.add(layers.Conv2D(64, kernel_size=3, strides=2, input_shape=(28, 28, 1), padding='same'))
    model.add(layers.LeakyReLU(alpha=0.01))
    assert model.input_shape == (None, 28, 28, 1)
    assert model.output_shape == (None, 14, 14, 64)

    # Convolutional layer, from 14x14x32 into 7x7x64 tensor
    model.add(layers.Conv2D(128, kernel_size=3, strides=2, padding='same'))
    model.add(layers.BatchNormalization())
    model.add(layers.LeakyReLU(alpha=0.01))
    #assert model.input_shape == (None, 14, 14, 32)
    assert model.output_shape == (None, 7, 7, 128)

    model.add(discriminator)

    model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(), metrics=['accuracy'])

    model.summary()

    return model

Когда я пытаюсь выполнить следующее, я получаю ошибку

d_loss_real = discriminator.train_on_batch(imgs, real)

Это ошибка, которую я получаю:

tensorflow.python.framework.errors_impl.InvalidArgumentError:  You must feed a value for placeholder tensor 'conv2d_input' with dtype float and shape [?,7,7,128]
     [[node conv2d_input (defined at /Users/Armin/PycharmProjects/DCGAN/test.py:495) ]] [Op:__inference_keras_scratch_graph_2800]

Однако он работает нормально, когда я пытаюсь сделать следующее:

x = discriminator(gen_imgs, training = True)
...