Help us understand the problem. What is going on with this article?

Python×Keras×GANチュートリアル 人工知能でファッション生成(2)

More than 1 year has passed since last update.

コードの解説

(2)もお読み頂きありがとうございます。
 それでは、さっそく、コードの解説に移らせていただきたいと思います。まずはganの仕組みをしっかり理解する必要があります。原論文をきちんと読んだ上で、実装に即した形で説明したいと思います。

GANの実装の仕組み

基本の構成要素

 GANは、2つのニューラルネットワークでできています。
 generaterとdescriminaterです。面倒なので、g,dと呼びます。gは、ニセの画像を作り出すニューラルネットワークです。dは、gが作ったニセの画像と、本物の画像を識別するニューラルネットワークです。
 なので、gが偽造者、dが判別者などと呼ばれたりもします。
gとdをトレーニングしていくと、最終的には、本物っぽい画像を生み出すgが得られることになります。このgを使えば、以後、本物っぽい画像をいくらでも生成できることになります。

gとdの実装理念

 gは、ノイズの入力に対してニセ画像を出力するニューラルネットワークです。
 ノイズは、サイズが(n×1)で、各要素が標準正規分布から発生させた乱数になっているnumpyndarrayです。
 ニセ画像は、サイズが(row×columun×3)で、各要素は−1から1の範囲に収まるnumpyndarrayです。
  g(ノイズ)=ニセ画像
ですね。
 dは、画像の入力に対して本物かどうかを出力するニューラルネットワークです。
 画像は、ニセ画像または真の画像です。真の画像は、サイズがニセ画像と同じで、実際の写真等をndarrayに変換したものです。ただし、各要素は255で割り算して−1されているので、範囲は−1から1になります。出力は、0から1のスカラーで、ニセ画像に対しては0,真の画像に対しては1を出力するようにトレーニングされます。
 d(画像)=0〜1ですね

学習のやり方

 ここが、元の論文以外でなかなか説明されていない部分です。
 学習は2ステップの組み合わせになります。
 1ステップ目は、gのパラメタを固定してdのパラメタだけを鍛えます。つまり、真の画像の入力には1を、ニセ画像=g(ノイズ)の入力には1を返すように、dだけをトレーニングします。
 2ステップ目は、dのパラメタを固定してgのパラメタだけを鍛えます。この際、gとdを組み合わせたモデルを作って、トレーニングします。組み合わせたモデルは、
d(g(noise))
ですね。その出力が1になるようにgのパラメタだけを鍛えます。
 各エポックごとに、このステップ1と2を繰り返していくのです。これがポイントです。敵対的生成モデルとは言うものの、gとdを同時に鍛えるのではなく、交互に鍛えるんですね。ですから、実装がカンタンに済むのです。

 説明が長くなってしまったので、コードの解説は次回行いたいと思います。お読み頂き、ありがとうございました。

ideki1991
弁護士のフリをしたプログラマ。 Python/Vue GoogleCloudPlatform/Firebase
abiteinc
法律に関するiOSアプリを開発・運営するスタートアップ。
https://sites.google.com/view/hatonoigon/home
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away