Я пытаюсь создать модель условного GAN на основе кода jacob ( https://github.com/jacobgil/keras-dcgan ). Однако модель generator_containing_discriminator вызывает ошибку утверждения при компиляции модели.
Я думаю, что это может иметь какое-то отношение к нескольким входам и выводам в модели генератора и дискриминатора; keras не нравится, когда я пытался объединить две модели.
В принципе, я хочу, чтобы генератор принимал два входа: g_inputs и вспомогательный_вход, а также для получения двух выходов: T и вспомогательный_вход. В этом случае я просто передаю вспомогательный_индумент.
Я хочу, чтобы дискриминатор принимал два входа: d_inputs и вспомогательный_индукт, и для получения одного выхода: T.
Я убедился, что размеры совпадают, но вы, ребята, знаете, почему это все еще не работает, когда я компилирую генератор_концепции_дискриминатора? Помогите оценить!
Мой код:
import warnings
warnings.filterwarnings('ignore')
from keras import backend as K
from keras.layers import Dense, Input
from keras.layers import Reshape, concatenate
from keras.layers.core import Activation
from keras.models import Model
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import UpSampling2D
from keras.layers.convolutional import Convolution2D, MaxPooling2D
from keras.layers.core import Flatten
K.set_image_dim_ordering('th')
#g_inputs is the input for generator
#auxiliary_input is the condition
#d_inputs is the input for discriminator
g_inputs = (Input(shape=(110,), dtype='float32', name='g_inputs'))
auxiliary_input = (Input(shape=(10,), dtype='float32', name='auxiliary_input'))
d_inputs = (Input(shape=(1,28,28), dtype='float32', name='d_inputs'))
def generator_model():
T = (Dense(1024))(g_inputs)
T = (Dense(128*7*7))(T)
T = (BatchNormalization())(T)
T = (Activation('tanh'))(T)
T = (Reshape((128, 7, 7), input_shape=(128*7*7,)))(T)
T = (UpSampling2D(size=(2, 2)))(T)
T = (Convolution2D(64, 5, 5, border_mode='same'))(T)
T = (BatchNormalization())(T)
T = (Activation('tanh'))(T)
T = (UpSampling2D(size=(2, 2)))(T)
T = (Convolution2D(1, 5, 5, border_mode='same'))(T)
T = (BatchNormalization())(T)
T = (Activation('tanh'))(T)
model = Model(input=[g_inputs, auxiliary_input], output=[T,auxiliary_input])
return model
def discriminator_model():
T = (Convolution2D(filters= 64, kernel_size= (5,5), padding='same'))(d_inputs)
T = (BatchNormalization())(T)
T = (Activation('tanh'))(T)
T = (MaxPooling2D(pool_size=(2, 2)))(T)
T = (Convolution2D(128, 5, 5))(T)
T = (BatchNormalization())(T)
T = (Activation('tanh'))(T)
T = (MaxPooling2D(pool_size=(2, 2)))(T)
T = (Flatten())(T)
T = concatenate([T, auxiliary_input])
T = (Dense(1024))(T)
T = (Activation('tanh'))(T)
T = (Dense(1))(T)
T = (Activation('sigmoid'))(T)
model = Model(input=[d_inputs,auxiliary_input], output=T)
return model
def generator_containing_discriminator(generator, discriminator):
T1 = generator([g_inputs, auxiliary_input])
discriminator.trainable = False
T2 = discriminator(T1)
model = Model(input=[g_inputs, auxiliary_input], output=T2)
return model
discriminator = discriminator_model()
generator = generator_model()
generator_containing_discriminator(generator, discriminator).summary()
01питон, машинное обучение, tensorflow, keras,