{"id":16202,"date":"2022-05-31T03:05:28","date_gmt":"2022-05-31T03:05:28","guid":{"rendered":"https:\/\/blog.datumo.com\/en\/?p=16202"},"modified":"2024-10-22T08:26:45","modified_gmt":"2024-10-22T08:26:45","slug":"understanding-gans-and-their-capabilities-to-generate-realistic-images","status":"publish","type":"post","link":"https:\/\/blog.datumo.com\/en\/tech\/16202","title":{"rendered":"Understanding GANs and their Capabilities to Generate Realistic Images"},"content":{"rendered":"[vc_row pix_particles_check=&#8221;&#8221;][vc_column]<div id=\"el1646799961152-e3ee06c0-4e82\" class=\"w-100 d-block \"><\/div><div class=\"pix-content-box card      vc_custom_1654577545529 custom-responsive-105827959   rounded-lg bg- w-100  \"   ><div class=\"\" style=\"z-index:30;position:relative;\">[vc_column_text]\r\n<p style=\"text-align: left;\"><span style=\"font-size: 14pt;\"><strong>\ud83d\udd11<\/strong> <strong>In 10 minutes you will learn:<\/strong><\/span><\/p>\r\n\r\n<ul class=\"p-rich_text_list p-rich_text_list__bullet\" data-stringify-type=\"unordered-list\" data-indent=\"0\" data-border=\"0\">\r\n \t<li>How GANs Work<\/li>\r\n<\/ul>\r\n[\/vc_column_text]<\/div><\/div>[vc_raw_html]JTNDbWV0YSUyMGh0dHAtZXF1aXYlM0QlMjJyZWZyZXNoJTIyJTIwY29udGVudCUzRCUyMjAlM0IlMjB1cmwlM0RodHRwcyUzQSUyRiUyRmRhdHVtby5jb20lMkZlbiUyRnVuZGVyc3RhbmRpbmctZ2Fucy1hbmQtdGhlaXItY2FwYWJpbGl0aWVzLXRvLWdlbmVyYXRlLXJlYWxpc3RpYy1pbWFnZXMlMkYlMjIlM0U=[\/vc_raw_html]<div id=\"el1650294698986-a1b962b5-ef42\" class=\"w-100 d-block \"><\/div>[\/vc_column][\/vc_row][vc_row pix_particles_check=&#8221;&#8221;][vc_column][vc_column_text css=&#8221;.vc_custom_1653970514513{padding-top: 40px !important;padding-right: 20px !important;padding-bottom: 40px !important;padding-left: 20px !important;}&#8221;]Generative Adversarial Networks commonly known as GANs are computational architectures that set two neural networks against each other (thus the name &#8220;adversarial&#8221;), to create new examples of data that fulfill the characteristics of real data. While GANs have a lot of applications, they are typically used in image, video, or speech generation.\r\n\r\nIn 2014, Ian Goodfellow, Yoshua Bengio and several academics at the University of Montreal, published a paper that introduced GANs. Referring to the impressive capabilities of GANs, Yann LeCun, research director at Facebook AI dubbed adversarial training &#8220;the most fascinating notion in machine learning in the last 10 years\u201d.[\/vc_column_text][\/vc_column][\/vc_row][vc_section full_width=&#8221;stretch_row&#8221; pix_over_visibility=&#8221;&#8221; css=&#8221;.vc_custom_1650444445523{padding-top: 80px !important;padding-bottom: 80px !important;background-color: #f8f9fa !important;}&#8221; el_id=&#8221;pix_section_program&#8221;][vc_row full_width=&#8221;stretch_row&#8221; pix_particles_check=&#8221;&#8221;][vc_column content_align=&#8221;text-center&#8221; offset=&#8221;vc_col-lg-offset-0 vc_col-lg-12 vc_col-md-offset-1 vc_col-md-10&#8243;]<div id=\"el1650442503491-f5da6b2f-fa35\" class=\"mb-3 text-left \"><h2 class=\"mb-32 pix-sliding-headline font-weight-bold secondary-font\" data-class=\"secondary-font text-heading-default\" data-style=\"\">So, How GANs Work<\/h2><\/div>[vc_column_text css=&#8221;.vc_custom_1653971017403{padding-top: 40px !important;padding-bottom: 40px !important;}&#8221;]\r\n<p style=\"text-align: left;\">To develop and modify new data, Ian Goodfellow&#8217;s GANs suggest using two neural networks. One is the generator network responsible for creating new instances of data. To put it simply, the process is the inverse of the classification method of neural networks. Unlike the other neural networks, the generator doesn\u2019t take the raw data and map it to predetermined model outputs. Instead it goes backwards from the output in an attempt to construct the input data that would then be mapped to that output. A generator network in GANs, for example, may start off with a matrix of pixels (consisting of random noise) and try to change them in such a manner that a classifier would categories them as a cat.<\/p>\r\n<p style=\"text-align: left;\">The second neural network in GANs is called the discriminator. On a scale of 0 to 1, it assesses the quality rating of the generator&#8217;s output. If the quality score is less than the desired level, the data is corrected by the generator and sent back to the discriminator. The GAN continues the loop in super-fast fashion until it reaches a point where it can generate data that accurately maps to the intended output.<\/p>\r\n&nbsp;\r\n\r\n<em><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-full wp-image-16207\" src=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/\u1100\u1173\u1105\u1175\u11b71.png\" alt=\"\" width=\"902\" height=\"393\" srcset=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/\u1100\u1173\u1105\u1175\u11b71.png 902w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/\u1100\u1173\u1105\u1175\u11b71-300x131.png 300w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/\u1100\u1173\u1105\u1175\u11b71-768x335.png 768w\" sizes=\"(max-width: 902px) 100vw, 902px\" \/><\/em>\r\n\r\n&nbsp;\r\n\r\n<em>Overview of GANs: <\/em><a href=\"https:\/\/medium.freecodecamp.org\/an-intuitive-introduction-to-generative-adversarial-networks-gans-7a2264a81394\"><em>Source<\/em><\/a>[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_row pix_particles_check=&#8221;&#8221;][vc_column]<div id=\"el1650442607008-a85a832d-43f0\" class=\"w-100 d-block \"><\/div><div  class=\"pix-heading-el text-left \"><div><div class=\"slide-in-container\"><h2 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Generating Realistic Images with GANs<\/h2><\/div><\/div><\/div>[vc_column_text css=&#8221;.vc_custom_1653971088425{padding-top: 40px !important;}&#8221;]In the original paper of GANs titled \u201c<a href=\"https:\/\/arxiv.org\/abs\/1406.2661\">Generative Adversarial Networks<\/a>\u201d Ian Goodfellow, et al. used three datasets (namely MNIST, CIFAR-10, and Toronto Face Database) to generate new images. So, generating new sample examples was the main application of GANs described in the paper.\r\n\r\n&nbsp;\r\n\r\n<img decoding=\"async\" class=\"aligncenter size-full wp-image-16204\" src=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2-3.png\" alt=\"\" width=\"977\" height=\"712\" srcset=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2-3.png 977w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2-3-300x219.png 300w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2-3-768x560.png 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/>\r\n\r\n&nbsp;\r\n\r\n<em>New Examples of Images Generated by GANs: <\/em><a href=\"https:\/\/arxiv.org\/abs\/1406.2661\"><em>Source<\/em><\/a>\r\n\r\n&nbsp;\r\n\r\nLikewise, in 2015 Alec Radford, et al. introduced Deep Convolutional Generative Adversarial Networks in his paper \u201c<a href=\"https:\/\/arxiv.org\/abs\/1511.06434\">Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks<\/a>\u201d. He also generated new realistic images of bedrooms and presented his analysis on training stable GANs.\r\n\r\n&nbsp;\r\n\r\n<img decoding=\"async\" class=\"aligncenter size-full wp-image-16205\" src=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/3.png\" alt=\"\" width=\"977\" height=\"491\" srcset=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/3.png 977w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/3-300x151.png 300w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/3-768x386.png 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/>\r\n\r\n&nbsp;\r\n\r\n<em>New Examples of Bedroom Images Generated by DCGANs: <\/em><a href=\"https:\/\/arxiv.org\/abs\/1511.06434\"><em>Source<\/em><\/a>[\/vc_column_text]<div id=\"el1650442651668-7359ff25-270a\" class=\"w-100 d-block \"><\/div><div id=\"el1650294913061-211813f5-5f2d\" class=\"w-100 d-block \"><\/div>[\/vc_column][\/vc_row][vc_section full_width=&#8221;stretch_row&#8221; pix_over_visibility=&#8221;&#8221; css=&#8221;.vc_custom_1650444445523{padding-top: 80px !important;padding-bottom: 80px !important;background-color: #f8f9fa !important;}&#8221;][vc_row full_width=&#8221;stretch_row&#8221; pix_particles_check=&#8221;&#8221;][vc_column content_align=&#8221;text-center&#8221; offset=&#8221;vc_col-lg-offset-0 vc_col-lg-12 vc_col-md-offset-1 vc_col-md-10&#8243;]<div  class=\"pix-heading-el text-left \"><div><div class=\"slide-in-container\"><h2 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Let\u2019s Code a DCGAN from Scratch<\/h2><\/div><\/div><\/div>[vc_column_text css=&#8221;.vc_custom_1653971334657{padding-top: 40px !important;padding-right: 20px !important;padding-bottom: px !important;padding-left: 20px !important;}&#8221;]\r\n<p style=\"text-align: left;\">Let\u2019s not wait any longer and go into the implementation specifics of GANs as we go. Here we\u2019ll demonstrate how we can use Deep Convolutional Generative Adversarial Network implementation (DCGAN) to generate realistic images. In our implementation, Tensorflow is used, and some of the principles stated in the DCGAN paper are followed.<\/p>\r\n<p style=\"text-align: left;\">We\u2019ll train our DCGAN on Fashion-MNIST dataset comprising of 70,000 28\u00d728 grayscale images with 60,000 images for training and 10,000 images for testing. Plus, it includes 10 classes of products.<\/p>\r\n<p style=\"text-align: left;\">So, before we start, let\u2019s import some necessary packages we\u2019ll use in this implementation.<\/p>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">import tensorflow as tf\r\nimport tensorflow.keras as keras\r\nimport matplotlib.pyplot as plt\r\nimport numpy as np\r\nfrom IPython import display\r\n<\/pre>\r\n&nbsp;\r\n<p style=\"text-align: left;\">We\u2019ll use some helper functions to visualize the results in the later sessions.<\/p>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def visualize_images(sample_images, columns=None):\r\n    '''displaying fake examples'''\r\n    display.clear_output(wait=False)  \r\n\r\n    columns = columns or len(sample_images)\r\n    rows = (len(sample_images) - 1) \/\/ columns + 1\r\n\r\n    if sample_images.shape[-1] == 1:\r\n        sample_images = np.squeeze(sample_images, axis=-1)\r\n\r\n    plt.figure(figsize=(columns, rows))\r\n    \r\n    for index, sample_image in enumerate(sample_images):\r\n        plt.subplot(rows, columns, index + 1)\r\n        plt.imshow(sample_image, cmap=\"binary\")\r\n        plt.axis(\"off\")\r\n<\/pre>\r\n&nbsp;\r\n<p style=\"text-align: left;\">After downloading the Fashion-MNIST dataset, training images are converted into batches. Then we\u2019ll apply some basic preprocessing steps.<\/p>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># downloading the Fashin-MNIST dataset\r\nfrom keras.datasets import fashion_mnist\r\n(X_train, _), _ = fashion_mnist.load_data()\r\n\r\n# normalizing the images\r\nX_train = X_train.astype(np.float32) \/ 255\r\n\r\n# reshape and rescale\r\nX_train = X_train.reshape(-1, 28, 28, 1) * 2. - 1.\r\n\r\n#defining the batch size\r\nbatch_size = 64\r\n\r\n# creating batches of tensors before feeding them into the model\r\ndata_set = tf.data.Dataset.from_tensor_slices(X_train)\r\ndata_set = data_set.shuffle(1000)\r\ndata_set = data_set.batch(batch_size, drop_remainder=True).prefetch(1)\r\n<\/pre>\r\n[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_row pix_particles_check=&#8221;&#8221;][vc_column]<div id=\"el1650362147064-486b7dc2-a9b3\" class=\"w-100 d-block \"><\/div><div id=\"el1650450433074-0be5e40e-928e\" class=\"w-100 d-block \"><\/div><div  class=\"pix-heading-el text-left \"><div><div class=\"slide-in-container\"><h2 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Building the Generator Neural Network<\/h2><\/div><\/div><\/div>[vc_column_text css=&#8221;.vc_custom_1653971423097{padding-top: 40px !important;padding-bottom: 0px !important;}&#8221;]The generator network takes random noise samples as inputs. They are eventually transformed into the shape of Fashion-MNIST images. Following the steps below, let\u2019s build a generator network for a DCGAN.\r\n<ul>\r\n \t<li>We\u2019ll feed the noise samples as input to the dense layer of the network.<\/li>\r\n \t<li>The output of the network will be reshaped in order to form three dimensions. This goes for length, width, and number of filters.<\/li>\r\n \t<li>We\u2019ll perform the deconvolution operation with Conv2DTranspose and set the stride at 2.<\/li>\r\n \t<li>The number of filers shall be reduced by half at each level of the network.<\/li>\r\n \t<li>We perform upsampling operation in order to match the feature size of the training images. In this case, it should be 28 x 28 x 1.<\/li>\r\n \t<li>Batch Normalization layer is added after every convolution layer except for the final deconvolution layer.<\/li>\r\n \t<li>As best practice, we use SELU (Scaled Exponential Linear Unit) activation function for intermediate deconvolution operations.<\/li>\r\n \t<li>Similarly for the output layer, tanh is used.<\/li>\r\n<\/ul>\r\nLet\u2019s code everything described above in a block and print out the model summary in order to check the dimensions and shapes at each layer.\r\n\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">from keras.models import Sequential\r\nfrom keras.layers import Dense, Reshape, BatchNormalization, Conv2DTranspose, Conv2D, Dropout, Flatten\r\ncodings_size = 32\r\n\r\ndef generator_nn(codings_size):\r\n  generator = Sequential([Dense(7 * 7 * 128, input_shape=[codings_size]),\r\n                          Reshape([7, 7, 128]),\r\n                          BatchNormalization(),\r\n                          Conv2DTranspose(64, kernel_size=5, strides=2, padding=\"SAME\",\r\n                                          activation=\"selu\"),\r\n                          BatchNormalization(),\r\n                          Conv2DTranspose(1, kernel_size=5, strides=2, padding=\"SAME\",\r\n                                          activation=\"tanh\"),\r\n                          ])\r\n  return generator\r\n\r\n# get the generator network and print out the summary\r\ngen = generator_nn(codings_size)\r\ngen.summary()\r\n<\/pre>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Model: \"sequential\"\r\n_________________________________________________________________\r\n Layer (type)                Output Shape              Param #   \r\n=================================================================\r\n dense (Dense)               (None, 6272)              206976    \r\n                                                                 \r\n reshape (Reshape)           (None, 7, 7, 128)         0         \r\n                                                                 \r\n batch_normalization (BatchN  (None, 7, 7, 128)        512       \r\n ormalization)                                                   \r\n                                                                 \r\n conv2d_transpose (Conv2DTra  (None, 14, 14, 64)       204864    \r\n nspose)                                                         \r\n                                                                 \r\n batch_normalization_1 (Batc  (None, 14, 14, 64)       256       \r\n hNormalization)                                                 \r\n                                                                 \r\n conv2d_transpose_1 (Conv2DT  (None, 28, 28, 1)        1601      \r\n ranspose)                                                       \r\n                                                                 \r\n=================================================================\r\nTotal params: 414,209\r\nTrainable params: 413,825\r\nNon-trainable params: 384\r\n_________________________________________________________________\r\n<\/pre>\r\n[\/vc_column_text]<div id=\"el1650362652282-42ee7789-aa09\" class=\"w-100 d-block \"><\/div>[\/vc_column][\/vc_row][vc_section full_width=&#8221;stretch_row&#8221; pix_over_visibility=&#8221;&#8221; css=&#8221;.vc_custom_1650444445523{padding-top: 80px !important;padding-bottom: 80px !important;background-color: #f8f9fa !important;}&#8221;][vc_row full_width=&#8221;stretch_row&#8221; pix_particles_check=&#8221;&#8221;][vc_column content_align=&#8221;text-center&#8221; offset=&#8221;vc_col-lg-offset-0 vc_col-lg-12 vc_col-md-offset-1 vc_col-md-10&#8243;]<div  class=\"pix-heading-el text-left \"><div><div class=\"slide-in-container\"><h2 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Building the Discriminator Neural Network<\/h2><\/div><\/div><\/div>[vc_column_text css=&#8221;.vc_custom_1653971893335{padding-top: 40px !important;}&#8221;]\r\n<p style=\"text-align: left;\">Similarly, we\u2019ll build a discriminator network using the following steps:<\/p>\r\n\r\n<ul style=\"text-align: left;\">\r\n \t<li>Use the convolutional layers by setting the strides at 2 in order to reduce the size or dimensions of the input images.<\/li>\r\n \t<li>Use \u201cLeakyRELU\u201d as an activation function after every convolution operation.<\/li>\r\n \t<li>Flatten the output features and feed them to a dense layer with single neuron activated by \u201csigmoid\u201d activation function.<\/li>\r\n<\/ul>\r\n<p style=\"text-align: left;\">The implementation details along with the model summary are as under.<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># building the discriminator network\r\n\r\ndef discriminator_nn():\r\n  discriminator = Sequential([\r\n                              Conv2D(64, kernel_size=5, strides=2, padding=\"SAME\",\r\n                                     activation=keras.layers.LeakyReLU(0.2),\r\n                                     input_shape=[28, 28, 1]),\r\n                              Dropout(0.3),\r\n                              Conv2D(128, kernel_size=5, strides=2, padding=\"SAME\",\r\n                                     activation=keras.layers.LeakyReLU(0.2)),\r\n                              Dropout(0.4),\r\n                              Flatten(),\r\n                              Dense(1, activation=\"sigmoid\")\r\n])\r\n  return discriminator\r\ndiscrim = discriminator_nn()\r\ndiscrim.summary()\r\n<\/pre>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">Model: \"sequential_11\"\r\n_________________________________________________________________\r\n Layer (type)                Output Shape              Param #   \r\n=================================================================\r\n conv2d_6 (Conv2D)           (None, 14, 14, 64)        1664      \r\n                                                                 \r\n dropout_6 (Dropout)         (None, 14, 14, 64)        0         \r\n                                                                 \r\n conv2d_7 (Conv2D)           (None, 7, 7, 128)         204928    \r\n                                                                 \r\n dropout_7 (Dropout)         (None, 7, 7, 128)         0         \r\n                                                                 \r\n flatten_2 (Flatten)         (None, 6272)              0         \r\n                                                                 \r\n dense_9 (Dense)             (None, 1)                 6273      \r\n                                                                 \r\n=================================================================\r\nTotal params: 212,865\r\nTrainable params: 212,865\r\nNon-trainable params: 0\r\n_________________________________________________________________\r\n<\/pre>\r\n<p style=\"text-align: left;\">Now, let\u2019s combine these two neural networks (i.e. generator and discriminator) for a complete architecture of a DCGAN. Here is how we\u2019ll do that.<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#combining the generator and discriminator\r\ndcgan = Sequential([gen, discrim])\r\n<\/pre>\r\n&nbsp;\r\n<p style=\"text-align: left;\">As the model distinguishes between fake (0) and real (1), we\u2019ll use \u201cbinary_crossentropy\u201d in order to measure the loss between the images. Moreover, we\u2019ll optimize the model loss with RMS_prop optimizer. Let\u2019s now compile the model for training.<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># compiling the model\r\ndiscrim.compile(loss=\"binary_crossentropy\", optimizer=\"rmsprop\")\r\ndiscrim.trainable = False\r\ndcgan.compile(loss=\"binary_crossentropy\", optimizer=\"rmsprop\")\r\n<\/pre>\r\n<p style=\"text-align: left;\">Let\u2019s define a function that trains our GAN on a given batch of images. The process involves two-phase training steps as under:<\/p>\r\n\r\n<ul style=\"text-align: left;\">\r\n \t<li style=\"text-align: left;\">First off, we\u2019ll train our discriminator network in order to distinguish between real and fake images.<\/li>\r\n \t<li style=\"text-align: left;\">Next, the generator network will be trained to produce fake images that should trick the discriminator to map them as real ones.<\/li>\r\n<\/ul>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def train_dcgan(dcgan, data_set, random_normal_dimensions, epochs=20):\r\n    gen, discrim = dcgan.layers\r\n    for epoch in range(epochs):\r\n        print(\"Epoch {}\/{}\".format(epoch + 1, epochs))       \r\n        for real_image_samples in data_set:\r\n            # infer batch size from the training batch\r\n            batch_size = real_image_samples.shape[0]\r\n\r\n            # Training the discriminator network - first phase\r\n            # creating random noise samples\r\n            noise_samples = tf.random.normal(shape=[batch_size, random_normal_dimensions])\r\n\r\n            # generating fake image samples\r\n            fake_image_samples = gen(noise_samples)\r\n\r\n            # listing fake and real images by concatinating them\r\n            conc_images = tf.concat([fake_image_samples, real_image_samples], axis=0)\r\n\r\n            # Create the labels for the discriminator\r\n            # 0 for the fake images\r\n            # 1 for the real images\r\n            discrim_labels = tf.constant([[0.]] * batch_size + [[1.]] * batch_size)\r\n\r\n            # set the discriminator to trainable\r\n            discrim.trainable = True\r\n\r\n            # training the discriminator on the batches of conc_images and the discrim_labels\r\n            discrim.train_on_batch(conc_images, discrim_labels)\r\n\r\n            # Training the generator netwrok - 2nd phase\r\n            # feeding noise input samples into DCGAN\r\n            noise_samples = tf.random.normal(shape=[batch_size, random_normal_dimensions])\r\n            \r\n            # labelling generated images as real images\r\n            gen_labels = tf.constant([[1.]] * batch_size)\r\n\r\n            # freezing the discriminator network\r\n            discrim.trainable = False\r\n\r\n            # training the DCGAN with labels set to true\r\n<\/pre>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    dcgan.train_on_batch(noise_samples, gen_labels)\r\n\r\n# plotting fake image samples\r\nvisualize_images(fake_image_samples, 16)                     \r\nplt.show()\r\n<\/pre>\r\n&nbsp;\r\n<p style=\"text-align: left;\">Finally, it\u2019s time to train our DCGAN and see the magic. We\u2019ll call the above function to start the training. While we set the number of epochs to 20, you are free to try the higher number in order to achieve more accuracy. It should take around 30 seconds to execute single epoch in a colab environment. You will visualize the results (fake images generated by our DCGAN) after every epoch during the training process.<\/p>\r\n<p style=\"text-align: left;\">So, let\u2019s start off the training by simply executing the below lines of code.<\/p>\r\n&nbsp;\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#trining the DCGAN for 20 epochs\r\ntrain_dcgan(dcgan, data_set, codings_size, 20)\r\n<\/pre>\r\n&nbsp;\r\n<p style=\"text-align: left;\">After the training, your final output should look like this.<\/p>\r\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-16206\" src=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/4.png\" alt=\"\" width=\"977\" height=\"249\" srcset=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/4.png 977w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/4-300x76.png 300w, https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/4-768x196.png 768w\" sizes=\"(max-width: 977px) 100vw, 977px\" \/>[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_row pix_particles_check=&#8221;&#8221;][vc_column]<div id=\"el1653971463480-ce74a014-4ae9\" class=\"w-100 d-block \"><\/div>[vc_column_text css=&#8221;.vc_custom_1653971913743{padding-top: 40px !important;padding-bottom: 0px !important;}&#8221;]In machine learning community, GANs have been one of the hottest topics due to their impressive capabilities. These models can take the unsupervised learning methods to new heights, hence broadening the scope of machine learning.\r\n\r\nSince its inception, many strategies for training GANs have been developed by the researchers. They have been able to introduce some new and state-of-the-art training strategies that can be employed in image\/video generation and semi-supervised learning.[\/vc_column_text]<div id=\"el1653972293756-76a5ecd1-3d25\" class=\"w-100 d-block \"><\/div><div  class=\"pix-heading-el text-left  vc_custom_1653972289729\"><div><div class=\"slide-in-container\"><h3 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Appendix<\/h3><\/div><\/div><\/div><a  href=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/DCGAN_Implementation.ipynb_.zip\" class=\"btn mb-2     btn-primary btn-flat d-inline-block      btn-md\" target=\"_blank\" rel=\"noopener\"    ><span class=\"font-weight-bold \" >DCGAN_Implementation.ipynb<\/span><\/a><div id=\"el1653971463481-f4f34d7c-39ce\" class=\"w-100 d-block \"><\/div><div  class=\"pix-heading-el text-left  vc_custom_1653971997366\"><div><div class=\"slide-in-container\"><h3 class=\"text-heading-default font-weight-bold heading-text el-title_custom_color mb-12\" style=\"\" data-anim-type=\"\" data-anim-delay=\"0\">Sources:<\/h3><\/div><\/div><\/div>[vc_column_text css=&#8221;.vc_custom_1653971973031{padding-top: 40px !important;padding-bottom: 0px !important;}&#8221;]<em>\u201c<\/em><a href=\"https:\/\/arxiv.org\/abs\/1406.2661\"><em>Generative Adversarial Networks<\/em><\/a><em>\u201d<\/em>\r\n\r\n<em>\u201c<\/em><a href=\"https:\/\/arxiv.org\/abs\/1511.06434\"><em>Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks<\/em><\/a><em>\u201d<\/em>[\/vc_column_text]<div id=\"el1653971463480-31c1935f-3278\" class=\"w-100 d-block \"><\/div>[\/vc_column][\/vc_row][vc_row pix_particles_check=&#8221;&#8221;][vc_column width=&#8221;1\/2&#8243;]<div id=\"el1646794934167-c0c94dd3-ea74\" class=\"w-100 d-block \"><\/div><div class=\" mb-3 mb-md-0 \"  ><div class=\"card w-100 h-100 bg-white  vc_custom_1652982865548  pix-hover-item rounded-10 position-relative overflow-hidden2 text-white tilt fancy_card\" ><div class=\"card-img-overlay overflow-visible d-inline-block w-100 pix-img-overlay pix-p-30 d-flex align-items-end text-left\"><div class=\"w-100 \"><h3 class=\"card-title  text-black font-weight-bold mb-0 animate-in\" style=\"\">See what we can do for you.<\/h3><p class=\"card-text pix-pt-10 text-black \" style=\"\">Build smarter AI with us.<\/p><div class=\"card-btn-div mt-4 d-inline-block w-100\"><a  href=\"https:\/\/datumo.com\" class=\"btn mb-2     text-white btn-black d-inline-block      btn-md\" target=\"_blank\" rel=\"noopener\"    ><span class=\"font-weight-bold \" >Learn More<\/span><\/a><\/div><\/div><\/div><\/div><\/div>[\/vc_column][vc_column width=&#8221;1\/2&#8243;]<div id=\"el1646794982519-9a19190b-7fde\" class=\"w-100 d-block \"><\/div><div class=\" mb-3 mb-md-0 \"  ><div class=\"card w-100 h-100 bg-black  vc_custom_1653971438710  pix-hover-item rounded-10 position-relative overflow-hidden2 text-white tilt fancy_card\" ><div class=\"card-img-overlay overflow-visible d-inline-block w-100 pix-img-overlay pix-p-30 d-flex align-items-end text-left\"><div class=\"w-100 \"><h3 class=\"card-title  text-white font-weight-bold mb-0 animate-in\" style=\"\">We would like to support the AI industry by sharing.<\/h3><p class=\"card-text pix-pt-10 text-white \" style=\"\"><\/p><div class=\"card-btn-div mt-4 d-inline-block w-100\"><a  href=\"https:\/\/open.datumo.com\/en\" class=\"btn mb-2    vc_custom_1653971438714  btn-primary d-inline-block      btn-md\" target=\"_blank\" rel=\"noopener\"    ><span class=\"font-weight-bold \" >Download Open Datasets<\/span><\/a><\/div><\/div><\/div><\/div><\/div>[\/vc_column][\/vc_row][vc_row pix_particles_check=&#8221;&#8221;][vc_column]<div id=\"el1646799961152-e3ee06c0-4e82\" class=\"w-100 d-block \"><\/div>[\/vc_column][\/vc_row]","protected":false},"excerpt":{"rendered":"[vc_row pix_particles_check=&#8221;&#8221;][vc_column][vc_raw_html]JTNDbWV0YSUyMGh0dHAtZXF1aXYlM0QlMjJyZWZyZXNoJTIyJTIwY29udGVudCUzRCUyMjAlM0IlMjB1cmwlM0RodHRwcyUzQSUyRiUyRmRhdHVtby5jb20lMkZlbiUyRnVuZGVyc3RhbmRpbmctZ2Fucy1hbmQtdGhlaXItY2FwYWJpbGl0aWVzLXRvLWdlbmVyYXRlLXJlYWxpc3RpYy1pbWFnZXMlMkYlMjIlM0U=[\/vc_raw_html][\/vc_column][\/vc_row][vc_row pix_particles_check=&#8221;&#8221;][vc_column][vc_column_text css=&#8221;.vc_custom_1653970514513{padding-top: 40px !important;padding-right: 20px !important;padding-bottom: 40px !important;padding-left: 20px !important;}&#8221;]Generative Adversarial Networks commonly known as GANs are computational architectures that set two neural networks against each other (thus the name &#8220;adversarial&#8221;), to create new examples of data that&#8230;","protected":false},"author":1,"featured_media":2765,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131],"tags":[26,127,171,169,170],"class_list":["post-16202","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-ai","tag-datumo","tag-dcgan","tag-gans","tag-realistic-images"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding GANs and their Capabilities to Generate Realistic Images - DATUMO<\/title>\n<meta name=\"description\" content=\"Referring to the impressive capabilities of GANs, Yann LeCun &quot;the most fascinating notion in machine learning in the last 10 years\u201d.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.datumo.com\/en\/tech\/16202\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding GANs and their Capabilities to Generate Realistic Images\" \/>\n<meta property=\"og:description\" content=\"Referring to the impressive capabilities of GANs, Yann LeCun &quot;the most fascinating notion in machine learning in the last 10 years\u201d.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.datumo.com\/en\/tech\/16202\" \/>\n<meta property=\"og:site_name\" content=\"DATUMO\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-31T03:05:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-22T08:26:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1821\" \/>\n\t<meta property=\"og:image:height\" content=\"1660\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DATUMO\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Understanding GANs and their Capabilities to Generate Realistic Images\" \/>\n<meta name=\"twitter:description\" content=\"Referring to the impressive capabilities of GANs, Yann LeCun &quot;the most fascinating notion in machine learning in the last 10 years\u201d.\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"DATUMO\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"9\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202\"},\"author\":{\"name\":\"DATUMO\",\"@id\":\"https:\/\/blog.datumo.com\/#\/schema\/person\/02ec2d0ba953b146878dab089dc735b6\"},\"headline\":\"Understanding GANs and their Capabilities to Generate Realistic Images\",\"datePublished\":\"2022-05-31T03:05:28+00:00\",\"dateModified\":\"2024-10-22T08:26:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202\"},\"wordCount\":2204,\"publisher\":{\"@id\":\"https:\/\/blog.datumo.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg\",\"keywords\":[\"AI\",\"datumo\",\"DCGAN\",\"GANs\",\"Realistic Images\"],\"articleSection\":[\"tech\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202\",\"url\":\"https:\/\/blog.datumo.com\/en\/tech\/16202\",\"name\":\"Understanding GANs and their Capabilities to Generate Realistic Images - DATUMO\",\"isPartOf\":{\"@id\":\"https:\/\/blog.datumo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg\",\"datePublished\":\"2022-05-31T03:05:28+00:00\",\"dateModified\":\"2024-10-22T08:26:45+00:00\",\"description\":\"Referring to the impressive capabilities of GANs, Yann LeCun \\\"the most fascinating notion in machine learning in the last 10 years\u201d.\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.datumo.com\/en\/tech\/16202\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage\",\"url\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg\",\"contentUrl\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg\",\"width\":1821,\"height\":1660},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.datumo.com\/en\/tech\/16202#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.datumo.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Understanding GANs and their Capabilities to Generate Realistic Images\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.datumo.com\/#website\",\"url\":\"https:\/\/blog.datumo.com\/\",\"name\":\"DATUMO\",\"description\":\"The Data for Smarter AI\",\"publisher\":{\"@id\":\"https:\/\/blog.datumo.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.datumo.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.datumo.com\/#organization\",\"name\":\"DATUMO\",\"url\":\"https:\/\/blog.datumo.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/blog.datumo.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2.1.webp\",\"contentUrl\":\"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2.1.webp\",\"width\":1080,\"height\":600,\"caption\":\"DATUMO\"},\"image\":{\"@id\":\"https:\/\/blog.datumo.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.datumo.com\/#\/schema\/person\/02ec2d0ba953b146878dab089dc735b6\",\"name\":\"DATUMO\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/blog.datumo.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1942a8a63e1c8fa0d9be56cda789edd6c0a866259cd5dca24952597ffa8bab3d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1942a8a63e1c8fa0d9be56cda789edd6c0a866259cd5dca24952597ffa8bab3d?s=96&d=mm&r=g\",\"caption\":\"DATUMO\"},\"description\":\"DATUMO, The Data for Smarter AI. We seek to drive impact in the world by providing diverse and high quality data to build smarter AI.\",\"sameAs\":[\"https:\/\/blog.datumo.com\/en\"],\"url\":\"https:\/\/blog.datumo.com\/en\/author\/selectstar\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Understanding GANs and their Capabilities to Generate Realistic Images - DATUMO","description":"Referring to the impressive capabilities of GANs, Yann LeCun \"the most fascinating notion in machine learning in the last 10 years\u201d.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.datumo.com\/en\/tech\/16202","og_locale":"ko_KR","og_type":"article","og_title":"Understanding GANs and their Capabilities to Generate Realistic Images","og_description":"Referring to the impressive capabilities of GANs, Yann LeCun \"the most fascinating notion in machine learning in the last 10 years\u201d.","og_url":"https:\/\/blog.datumo.com\/en\/tech\/16202","og_site_name":"DATUMO","article_published_time":"2022-05-31T03:05:28+00:00","article_modified_time":"2024-10-22T08:26:45+00:00","og_image":[{"width":1821,"height":1660,"url":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg","type":"image\/jpeg"}],"author":"DATUMO","twitter_card":"summary_large_image","twitter_title":"Understanding GANs and their Capabilities to Generate Realistic Images","twitter_description":"Referring to the impressive capabilities of GANs, Yann LeCun \"the most fascinating notion in machine learning in the last 10 years\u201d.","twitter_misc":{"\uae00\uc4f4\uc774":"DATUMO","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"9\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#article","isPartOf":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202"},"author":{"name":"DATUMO","@id":"https:\/\/blog.datumo.com\/#\/schema\/person\/02ec2d0ba953b146878dab089dc735b6"},"headline":"Understanding GANs and their Capabilities to Generate Realistic Images","datePublished":"2022-05-31T03:05:28+00:00","dateModified":"2024-10-22T08:26:45+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202"},"wordCount":2204,"publisher":{"@id":"https:\/\/blog.datumo.com\/#organization"},"image":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage"},"thumbnailUrl":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg","keywords":["AI","datumo","DCGAN","GANs","Realistic Images"],"articleSection":["tech"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/blog.datumo.com\/en\/tech\/16202","url":"https:\/\/blog.datumo.com\/en\/tech\/16202","name":"Understanding GANs and their Capabilities to Generate Realistic Images - DATUMO","isPartOf":{"@id":"https:\/\/blog.datumo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage"},"image":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage"},"thumbnailUrl":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg","datePublished":"2022-05-31T03:05:28+00:00","dateModified":"2024-10-22T08:26:45+00:00","description":"Referring to the impressive capabilities of GANs, Yann LeCun \"the most fascinating notion in machine learning in the last 10 years\u201d.","breadcrumb":{"@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.datumo.com\/en\/tech\/16202"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#primaryimage","url":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg","contentUrl":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2020\/05\/portfolio-13.jpg","width":1821,"height":1660},{"@type":"BreadcrumbList","@id":"https:\/\/blog.datumo.com\/en\/tech\/16202#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.datumo.com\/en\/"},{"@type":"ListItem","position":2,"name":"Understanding GANs and their Capabilities to Generate Realistic Images"}]},{"@type":"WebSite","@id":"https:\/\/blog.datumo.com\/#website","url":"https:\/\/blog.datumo.com\/","name":"DATUMO","description":"The Data for Smarter AI","publisher":{"@id":"https:\/\/blog.datumo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.datumo.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/blog.datumo.com\/#organization","name":"DATUMO","url":"https:\/\/blog.datumo.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/blog.datumo.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2.1.webp","contentUrl":"https:\/\/blog.datumo.com\/en\/wp-content\/uploads\/2022\/05\/2.1.webp","width":1080,"height":600,"caption":"DATUMO"},"image":{"@id":"https:\/\/blog.datumo.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blog.datumo.com\/#\/schema\/person\/02ec2d0ba953b146878dab089dc735b6","name":"DATUMO","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/blog.datumo.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1942a8a63e1c8fa0d9be56cda789edd6c0a866259cd5dca24952597ffa8bab3d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1942a8a63e1c8fa0d9be56cda789edd6c0a866259cd5dca24952597ffa8bab3d?s=96&d=mm&r=g","caption":"DATUMO"},"description":"DATUMO, The Data for Smarter AI. We seek to drive impact in the world by providing diverse and high quality data to build smarter AI.","sameAs":["https:\/\/blog.datumo.com\/en"],"url":"https:\/\/blog.datumo.com\/en\/author\/selectstar"}]}},"_links":{"self":[{"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/posts\/16202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/comments?post=16202"}],"version-history":[{"count":14,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/posts\/16202\/revisions"}],"predecessor-version":[{"id":16914,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/posts\/16202\/revisions\/16914"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/media\/2765"}],"wp:attachment":[{"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/media?parent=16202"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/categories?post=16202"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.datumo.com\/en\/wp-json\/wp\/v2\/tags?post=16202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}