2017年03月20日

LSTM GANの実装

LSTM GANの論文ではソースコードが見れるものが幾つもあります。

まずC-RNN-GAN: Continuous recurrent neural networks with adversarial training の実装ですが、
こうします
git clone https://github.com/olofmogren/c-rnn-gan/
cd c-rnn-gan
python rnn_gan.py --model medium --datadir midis --traindir 20161207-large_d --feed_previous --feature_matching --bidirectional_d --learning_rate 0.1 --pretraining_epochs 6


python3では実行できません
ImportError: No module named 'midi'
この時は、
pip install python-midi
こうします。

そして、実行時にダウンロードするmidiファイルですが、
どうも、幾つかがnot foundな状態になってると思います。



実行出力はエラーがなければ
done. time: 0.0366790294647
getting stats...
done. time: 1.78552603722
Saved generated_data/out-20161207-large_d-13-2017-03-01-17-57-09.mid.
Epoch: 14 Learning rate: 0.100, pretraining: False
train: 9 batch loss: G: 363.693, D: 345.678, avg loss: G: 358.349, D: 345.636 speed: 28.3 songs/s, avg in graph: 0.7, avg in python: 0.0.
のようになると思います

モデルは、 --traindir で指定したディレクトリにあって
model.ckpt-0000.index
model.ckpt-0000.data-00000-of-00001
のようなファイル名だと思います。

ところで、学習は結構遅いと思います。 1分で1epoch進むくらいの速度じゃないでしょうか?



実際にmidiを作成しているのは
song_data = sample(session, m)

ここですが、
内部では
model._generated_features にその値が在って、
さらに
input_ = tf.nn.relu(linear(input_, FLAGS.hidden_size_g, scope='input_layer', reuse_scope=(i!=0)))
output, state = cell(input_, state)
outputs.append(output)
generated_point = linear(output, num_song_features, scope='output_layer', reuse_scope=(i!=0))
self._generated_features.append(generated_point)

として、出力しています。
cell(input_, state) として、通常のRNNと同じ入出力だと思います。








Seqgan: sequence generative adversarial nets with policy gradientの実装ですが、
git clone https://github.com/LantaoYu/SeqGAN.git
cd SeqGAN/MLE_SeqGAN

こちらは実行時に特にエラーは生じませんでした
python pretrain_experiment.py

Start pre-training...
pre-train epoch: 0
>>>> generator train loss: 8.07218
pre-train epoch: 1
>>>> generator train loss: 7.82199
pre-train epoch: 2

python sequence_gan.py

Start pre-training...
pre-train epoch: 0
pre-train epoch 0 test_loss 10.3296
pre-train epoch: 1
pre-train epoch: 2

ただしpythonのバージョンが2.7なのか3で実行するのかが分からなかったのですが


2017年03月17日

LSTM GANの勉強

既に先行研究があるのですが、私などが思っていた物とは違う感じです。



C-RNN-GAN: Continuous recurrent neural networks with adversarial training
Olof Mogren  Chalmers University of Technology, Sweden
Constructive Machine Learning Workshop (CML) at NIPS 2016
Generative adversarial networks have been proposed as a way of efficiently training deep generative neural networks.
We propose a generative adversarial model that works on continuous sequential data, and apply it by training it on a collection of classical music.
We conclude that it generates music that sounds better and better as the model is trained, report statistics on generated music, and let the reader judge the quality by downloading the generated songs.

generative adversarial modelを連続データに対して適応し、クラシック音楽で訓練した。


2 C-RNN-GAN: A continuous recurrent network with adversarial training
The training becomes a zero-sum game for which the Nash equilibrium is when the generator produces data that the discriminator cannot tell from real data.
Generative adversarial networks学習について、こんな説明はどこか他にあったでしょうか?
このトレーニングは、ナッシュ平衡がジェネレータが実際のデータから弁別できないデータを生成するときのゼロサムゲームになります。


LSTMGAN1 図1:C-RNN-GAN ジェネレータ(G)は、連続したデータイベントのシーケンスを生成します。 識別器(D)は、実際の音楽データと生成されたデータとを区別するように訓練されている。



*いつも形が一番重要だと思ってるんですが
3 Experimental setup
generatorとdiscriminatorのLSTMは2層で、
LSTMのセルは隠れユニット数が350
Dは双方向レイアウトであり、Gは単方向である
D内の各LSTMセルからの出力は、
時間ステップにわたって共有された重みの全結合層に渡り、各セル毎のシグモイド出力が平均化され、シーケンスの最終決定に至る。

時間経過に伴う逆伝播(BPTT)およびミニバッチの確率的勾配降下が用いられた。
学習率は0.1に設定し、GとDの両方の重みにL2正規化を適用した。
........


であるので、 Generative adversarial networksをLSTMに適応した だけ の内容であるようです。
generatorの出力をそのままdiscriminatorに入力しています。

つまり単なる文生成モデルであり、
seq2seqのように、入力文に対する出力文を学習するようなことはしてないと思います。


他の研究でも、基本的には系列生成するのみだと思います。
続きを読む

2017年03月10日

Pixel Recursive Super Resolutionの勉強

グーグルの人工知能、今度は「モザイク画像の被写体を特定」する

これが、srezや、StackGANと、どう違うのかと思ったんですが、
しかし、内容は8×8の画像を32×32にするしかやってないと言うか、出来ないのでは...?
だから、たかが4×4=16倍程度の鮮明化しかしてないと思います。
それだったら、srezとかStackGANの方がよっぽど高解像度化してるんじゃないでしょうか?


Pixel Recursive Super Resolution
Ryan Dahl, Mohammad Norouzi, Jonathon Shlens    Google Brain
arXiv preprint arXiv:1702.00783 (2017).
1. Introduction

ズームファクタが(今回のように)非常に大きい場合、入力画像は、高解像度画像を正確に構成するために必要な全ての情報を含んではいない
従って、問題は一意的ではなく、低解像度入力画像と一致する高解像度画像が多数存在する事になる。
詳細情報がソース画像に存在しない場合、課題は画像の「ブレ軽減」だけではなく人間にとって尤もらしい画像を生成することになる。

3. Probabilistic super resolution


高解像度画像とそれに対応する低解像度画像の間の統計的依存性を識別する確率的超解像度モデルを学習することを目指す。

その形式として、出力ピクセルが入力条件として条件的に独立していることを前提としている。



Figure 3:
Pixelrecursive1 提案システムの構成は、 conditioningネットワークとpriorネットワークで成る
conditioningネットワークは、入力として低解像度画像を受け取り、高解像度(HR)画像ピクセルの条件付きログ確率を予測するlogitを出力する。
priorネットワーク(PixelCNN)は、以前の確率的予測(破線で示す)に基づいて予測を行う。



conditioningネットワークの方で予測画像を生成して、
その後、priorネットワークで何回も画像生成を繰り返す?

続きを読む

adsense
Categories
サイト内検索
にほんブログ村 科学ブログへ
にほんブログ村

amazon
Profile
Archives
blogchart
QRコード
QRコード
Recent Comments
o