Kami melatih jaringan kompetitif-generatif untuk menggambar di Azure ML

Pembelajaran mendalam kadang-kadang terlihat seperti sihir murni, terutama ketika komputer belajar melakukan sesuatu yang benar-benar kreatif, misalnya melukis gambar! Teknologi yang digunakan untuk ini disebut GAN, jaringan generatif yang kompetitif, dan dalam artikel ini kita akan melihat bagaimana jaringan tersebut diatur dan bagaimana melatih mereka untuk menghasilkan gambar menggunakan Azure Machine Learning.


Spanduk


Posting ini adalah bagian dari inisiatif AI April . Setiap hari di bulan April, kolega Microsoft saya menulis artikel menarik tentang AI dan pembelajaran mesin. Lihatlah kalender - tiba-tiba Anda akan menemukan ada topik lain yang menarik bagi Anda. Artikel terutama dalam bahasa Inggris.

Azure ML VS Code ), , Azure ML. , "" MNIST. Azure ML — , , :


Bunga-bungaPotret
, 2019, Art of the Artificial
keragan WikiArt:
, 2019,
keragan WikiArt:

WikiArt. , , , WikiArt Retriever, WikiArt Dataset GANGogh.


, dataset. , , :


Gambar bunga untuk melatih jaringan


, , ( , ), (, ) .


-


- (GAN).



GAN keragan Keras, .


GAN :


  • ,
  • , "" ( )

Arsitektur Gan


GAN :


  1. :
    noise = np.random.normal(0, 1, (batch_size, latent_dim))
    gen_imgs = generator.predict(noise)
    imgs = get_batch(batch_size)
  2. . ones zeros :
    d_loss_r = discriminator.train_on_batch(imgs, ones)
    d_loss_f = discriminator.train_on_batch(gen_imgs, zeros)
    d_loss = np.add(d_loss_r , d_loss_f)*0.5
  3. , , :
    g_loss = combined.train_on_batch(noise, ones)

, — :


discriminator = create_discriminator()
generator = create_generator()
discriminator.compile(loss='binary_crossentropy',optimizer=optimizer, 
                      metrics=['accuracy'])
discriminator.trainable = False
z = keras.models.Input(shape=(latent_dim,))
img = generator(z)
valid = discriminator(img)
combined = keras.models.Model(z, valid)
combined.compile(loss='binary_crossentropy', optimizer=optimizer)


, (CNN). 64x64 :


discriminator = Sequential()

for x in [16,32,64]: # number of filters on next layer
    discriminator.add(Conv2D(x, (3,3), strides=1, padding="same"))
    discriminator.add(AveragePooling2D())
    discriminator.addBatchNormalization(momentum=0.8))
    discriminator.add(LeakyReLU(alpha=0.2))
    discriminator.add(Dropout(0.3))

discriminator.add(Flatten())
discriminator.add(Dense(1, activation='sigmoid'))

3 :


  • 64x64x3 16- , ( AveragePooling2D ) 32x32x16.
  • 32x32x16 16x16x32
  • 8x8x64.

, ( — Dense ).



. , , — latent_dim=100. , , 100..


— 100 . . UpSampling2D , :


generator = Sequential()
generator.add(Dense(8 * 8 * 2 * size, activation="relu", 
                                      input_dim=latent_dim))
generator.add(Reshape((8, 8, 2 * size)))

for x in [64;32;16]:
    generator.add(UpSampling2D())
    generator.add(Conv2D(x, kernel_size=(3,3),strides=1,padding="same"))
    generator.add(BatchNormalization(momentum=0.8))
    generator.add(Activation("relu"))

generator.add(Conv2D(3, kernel_size=3, padding="same"))
generator.add(Activation("tanh"))

64x64x3, . tanh [-1;1] — , . , , ImageDataset, .


Azure ML


- , Azure ML !


, , . Azure ML , (accuracy) (loss). run.log, , Azure ML.


, , ( ) . , , .. - , .


, Azure ML , . log_image, numpy-, , matplotlib. , , . callbk, keragan :


def callbk(tr):
    if tr.gan.epoch % 20 == 0:
        res = tr.gan.sample_images(n=3)
        fig,ax = plt.subplots(1,len(res))
        for i,v in enumerate(res):
            ax[i].imshow(v[0])
        run.log_image("Sample",plot=plt)

:


gan = keragan.DCGAN(args)
imsrc = keragan.ImageDataset(args)
imsrc.load()
train = keragan.GANTrainer(image_dataset=imsrc,gan=gan,args=args)

train.train(callbk)

, keragan , args, , , , learning rate ..



Azure ML VS Code, , SDK, Azure ML. submit_gan.ipynb, :


  • : ws = Workspace.from_config()
  • : cluster = ComputeTarget(workspace=ws, name='My Cluster'). GPU, [NC6][AzureVMNC].
  • : ds.upload(...).

, , :


exp = Experiment(workspace=ws, name='KeraGAN')
script_params = {
    '--path': ws.get_default_datastore(),
    '--dataset' : 'faces',
    '--model_path' : './outputs/models',
    '--samples_path' : './outputs/samples',
    '--batch_size' : 32,
    '--size' : 512,
    '--learning_rate': 0.0001,
    '--epochs' : 10000
}
est = TensorFlow(source_directory='.',
    script_params=script_params,
    compute_target=cluster,
    entry_script='train_gan.py',
    use_gpu = True,
    conda_packages=['keras','tensorflow','opencv','tqdm','matplotlib'],
    pip_packages=['git+https://github.com/shwars/keragan@v0.0.1']

run = exp.submit(est)

model_path=./outputs/models samples_path=./outputs/samples, ( ) outputs. , , Azure ML.


Estimator, GPU, Tensorflow. Estimator, " " . Estimator- .


— , keragan GitHub. PyPI pip-, , GitHub , commit ID. , PyPI.


, Azure ML Portal:


Hasil Eksperimen Pelatihan GAN



GAN , . -, learning rate: , — . .


:


  • --size , . (64 128) , ( 1024) . 1024 , , progressive growing
  • --learning_rate . , .
  • --dateset. , , Azure ML datastore, .

, for, . , . .



, , . outputs/models, — outputs/samples. Azure ML Portal :


Portal Azure dengan Hasil Eksperimen


, , . run, , , ( ):


run.download_files(prefix='outputs/samples')

outputs/samples, .


run ( , ), , run id, :


run = Run(experiment=exp,run_id='KeraGAN_1584082108_356cf603')

. , , . , ( gen_):


fnames = run.get_file_names()
fnames = filter(lambda x : x.startswith('outputs/models/gen_'),fnames)

: outputs/models/gen_0.h5, outputs/models/gen_100.h5 .. :


no = max(map(lambda x: int(x[19:x.find('.')]), fnames))
fname = 'outputs/models/gen_{}.h5'.format(no)
fname_wout_path = fname[fname.rfind('/')+1:]
run.download_file(fname)

, fname_wout_path.



, Keras, , , , :


model = keras.models.load_model(fname_wout_path)
latent_dim=model.layers[0].input.shape[1].value
res = model.predict(np.random.normal(0,1,(10,latent_dim)))

, [-1,1], [0,1], matplotlib:


res = (res+1.0)/2
fig,ax = plt.subplots(1,10,figsize=(15,10))
for i in range(10):
    ax[i].imshow(res[i])

:
Hasil GAN


, :


Musim semi penuh warnaPedesaan
Colourful Spring, 2020Countryside, 2020
Pemandangan musim panasPemandangan musim panas
Through the Icy Glass, 2020Summer Landscape, 2020

( ) , — @art_of_artificial, .


, - . , , . , :






- , Azure. , . , — — . ? ...



keragan, , DCGAN, Maxime Ellerbach, GANGogh. GAN Keras .


Azure ML



All Articles