(「DNA相同性検索とAI(2) 16SrDNA塩基配列で細菌分類」の続きです。)
全結合で単純に階層を増やす方法でどの程度まで精度を上げられるか試してみました。
基本的なパラメータは前回と同じで、以下の条件でテストしました。
①各属のデータは600件程度
MNIST(手書き数字の判別)では、一文字についての学習データは 5000件程度あるようです。
今回の16SrDNAデータでは、1つの属で600件程度なのでデータ不足で高い精度は望めませんが、
全結合でネットワーク構成を変えてどの程度まで上げられるか試してみました。
②epoch(≒学習回数)は、20~100 程度
例)
model.fit(traindna, trainans, n_epoch=50, batch_size=100, …
③汎化を考慮しない(汎化関数を読んでいない)
汎化については後で考慮します。
④同じノード数と活性化関数で単純に層を増やす
例)
net = tfl.fully_connected(net, 4096, activation=’relu’)
net = tfl.fully_connected(net, 4096, activation=’relu’)
・・・・
(1)全結合 ノード=1024、活性化関数=ReLU で層を増やす
層 精度
1 0.0001
2 0.0
4 0.5292
6 0.0989
(epoch=20)
4層で精度は上がったのですが、6層では下がってしまいました。
パラメータの epoch を 50 に増やしてみました。
層 精度
6 0.7403
8 0.0009
(epoch=50)
6層で epoch を増やすと精度が上がりましたが、8層では下がってしまいました。
epoch を 100 に増やしてみました。
層 精度
6 0.6997
8 0.0009
(epoch=100)
この程度で限界でしょうか?
次はノード数を4096にして層を増やしてみました。
(2)全結合 ノード=4096、活性化関数=ReLU で層を増やす
層 精度
1 0.0309
2 0.726
3 0.8056
4 0.7877
(epoch=20)
層を増やすと精度は上がるのですが、3層が最高で4層では精度が上がっていません。
学習パラメータの epoch(≒学習回数)を 50 に増やしてみました。
層 精度
4 0.964
5 0.952
(epoch=50)
精度が 0.96 程度に上がりました。
4層と5層ではあまり変化がありません。
5層の epoch を 100 に増やしてみました。
層 精度
5 0.9618
(epoch=100)
5層は4層 epoch=50 に比べてあまり変わりませんでした。
単純に階層を増やす方法ではこの辺が限界でしょうか?
今回のテストの範囲で結果最大は、
全結合、ノード数=4096、4層、epoch=50で、精度 0.964 でした。
今後の検討事項には、
①学習データ
・学習データの件数を増やす。
・学習データの塩基配列可変長にする。(今回は、1024固定長。)
・DNAの内部表現を変える。(今回は、浮動小数点型 A=1,T=3,C=7,G=9 に割り振っている。)
②ネットワーク構成・学習方式
・畳込ニューラルネットワークや再帰型ニューラルネットワークを試してみる。
・各学習パラメータを検討する。
などがあります。
このテストを例えて言うなら「先生の講義をよく聞いてテストで96点とった学生」です。
学生としては優秀なのですが応用分野での実務ではまだまだヒヨコです。
実務で使えるようになるまでには、まだまだ訓練・学習が必要です。
(S.Onda 2018/5/08)