はじめに
前回の記事から大幅な更新があったのでその報告を。
声マネおじさんになれそうで嬉しい。
更新点は?
Generatorのモデルを、Conv1Dを使うモデルから、全結合のみのモデルに変えた。
Discriminatorはそのまま。他の部分もそのまま。
## なんで?
よくある参考書とかで、MNISTの学習がチュートリアルなのが多いと思う。で、それを見てると、最初は28*28の2次元データを784の1次元データにしてから学習させてるのが多い(個人的な感覚)。
で、今回の方法も、STFTした結果(2次元、直交座標)を極座標に変換して、その大きさZと偏角θを、1本ずつ(1次元ずつ)入力して変換している。
ってことで、モデルを本に書いてあったやつを参考に組んでみたら上手く行ったっぽいって話。
多分、前回使っていたConv1Dは、今回の入力方法と相性が悪いんでしょうね。よく分からんけど。Conv1Dはいつ使うんやって疑問は浮かんだけど今は放置。そのうち調べると思う。多分。
## モデルはどうなった?
こうなった。
input = Input(shape=self.input_shape)
d = Dense(units=self.dim // 2)(input)
d = Dropout(0.5)(d)
d = LeakyReLU(alpha=0.2)(d)
d = Dense(units=self.dim // 4)(d)
d = Dropout(0.5)(d)
d = LeakyReLU(alpha=0.2)(d)
output = Dense(units=self.dim, activation="sigmoid")(d)
要は、Conv1Dを使う畳み込み層の部分を消して、全結合層の部分だけ残した感じ。
self.dimが入力するデータの長さ。今回はFFT長さの半分である512。FFTすると、FFT長さの半分が得られるようで、それに合わせた結果。 勘違いしてました。コードを見ると、自分でFFT長さを512にしてました。
処理速度めっちゃ速くなったし、結果も良くなったしで良いことばっかり。各層のノード数を調整すればもっと良い結果になりそう。多分。そのうち調整するかも。
## 変換結果は?
変換が進んでいると断言できる程度の結果にはなってる。現在(2019/05/04)、407kイテレーションほど進んだけど、半分半分って感じかな。
# 今後の展望とか
とりあえず経過を見て、順調そうならStarGANっていう、CycleGANを拡張したようなやつを試したい。これができると色々面白そう。
でも文字列から音声生成できるような機械学習もやりたい。WaveNetができるらしいけど、解説が少なくてよく分かんない。
とりあえず、自然言語処理あたりに手を出してみたい。アニメキャラっぽい感じの会話botとか作れたら面白そう。