Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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
Keras中的生成性对抗网络(GAN)-创建组合模型_Keras_Generative_Adversarial Machines - Fatal编程技术网

Keras中的生成性对抗网络(GAN)-创建组合模型

Keras中的生成性对抗网络(GAN)-创建组合模型,keras,generative,adversarial-machines,Keras,Generative,Adversarial Machines,我试图创建一个非常简单的GANs模型,但不确定如何组合生成器和鉴别器来训练生成器 from keras import optimizers from keras.layers import Input, Dense from keras.models import Sequential, Model import numpy as np def build_generator(input_dim=10, output_dim=40, hidden_dim=28): model = Se

我试图创建一个非常简单的GANs模型,但不确定如何组合生成器和鉴别器来训练生成器

from keras import optimizers
from keras.layers import Input, Dense
from keras.models import Sequential, Model
import numpy as np
def build_generator(input_dim=10, output_dim=40, hidden_dim=28):
     model = Sequential()
     model.add(Dense(hidden_dim, input_dim=input_dim, activation='sigmoid', kernel_initializer="random_uniform"))
     model.add(Dense(output_dim, activation='sigmoid', kernel_initializer="random_uniform"))
     return model

def build_discriminator(input_dim=40, hidden_dim=28, output_dim=50):
    input_d = Input(shape=(input_dim,))
    encoded = Dense(hidden_dim, activation='sigmoid', kernel_initializer="random_uniform")(input_d)
    decoded = Dense(output_dim, activation='sigmoid', kernel_initializer="random_uniform")(encoded)
    x = Dense(1, activation='relu')(encoded)
    y = Dense(1, activation='sigmoid')(encoded)
    model = Model(inputs=input_d, outputs=[decoded, x, y])
    return model

sgd = optimizers.SGD(lr=0.1) 
generator = build_generator(10, 100, 70)
discriminator = build_discriminator(100, 60, 80)
generator.compile(loss='mean_squared_error', optimizer=sgd)
discriminator.trainable = True
discriminator.compile(loss='mean_squared_error', optimizer=sgd)
discriminator.trainable = False

现在我不确定如何将两者结合起来,因此鉴别器将接收生成器输出,然后传递生成器反向传播数据。为此,最好使用functional
Model
API。这适用于更复杂的模型,接受分支、连接等

(在这种特定情况下,仍然可以使用顺序模型,但使用函数式API对我来说听起来总是更好,因为可以自由地在模型上进行进一步的实验)

因此,您可以保留两个连续模型。您所要做的就是构建第三个模型,其中包含这两个

generator=build_generator(..)#不要创建新的生成器,使用现有的生成器。
鉴别器=构建鉴别器(..)
现在,函数API模型的输入形状定义如下:

inputTensor = Input(inputShape) #inputShape must be the same as in generator     
我们通过将输入传递到层并获得输出来工作:

#Getting the output of the generator given our input tensor:
genOut = generator(inputTensor) #you call a model just like you call a layer    

#and we pass the generator's output to the discriminator, getting its output:
discOut = discriminator(genOut)
最后,我们通过定义其起点和终点来创建实际模型:

GAN = Model(inputTensor, discOut)


使用
compile
之前的
model.layers[i].trainable
参数定义每个模型中哪些层是可训练的或不可训练的

将生成器和鉴别器模型结合起来有时确实会令人困惑。我在下面的链接中找到了这个存储库,它很好地演示了如何在keras中构建GANs的多个体系结构的详细代码:

是的。。。引用:“(在这种特定情况下,仍然可以使用顺序模型,但使用函数式API对我来说听起来总是更好,因为自由和对模型的进一步实验)”——不过,我不确定如何处理输入形状。