質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5441閲覧

kerasにおけるアンサンブル学習

kaitokimura

総合スコア59

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/07/24 01:56

編集2017/07/24 02:14

現在猫犬画像の分類を行っているのですが過学習が起こり気味なので調べた一つの手法としてアンサンブル学習が見つかりました。
そこでこれを実装したいのですが今の私の環境から行ってどのように実装すれば良いかわからないのでアドバイスをいただきたいです。
現在は猫犬画像をopencvの環境で一つ一つの画像をimread,resize正規化して
onehotで猫、犬、その他のラベル付けをしています。
[1,0,0]
その画像をnumpy.asarrayで配列化していて学習データとしているのですが
ためしにskf = StratifiedKFold(n_splits=fold_num)として
for train, test in skf.split(x_add,y_add):
このときx_addは全ての学習データのasarrayが入っています。
y_addには全てのonehotラベルの入っています。
例:[[1,0,0],[0,0,1],[0,1,0],[0,0,1],...[1,0,0]]
この結果

File "kml_train_4.py", line 131, in <module> for train, test in skf.split(x_add,y_add): File "/Users/hoge/.pyenv/versions/anaconda3-4.3.1/envs/opencvtest/lib/python3.5/site-packages/sklearn/model_selection/_split.py", line 322, in split for train, test in super(_BaseKFold, self).split(X, y, groups): File "/Users/hoge/.pyenv/versions/anaconda3-4.3.1/envs/opencvtest/lib/python3.5/site-packages/sklearn/model_selection/_split.py", line 91, in split for test_index in self._iter_test_masks(X, y, groups): File "/Users/hoge/.pyenv/versions/anaconda3-4.3.1/envs/opencvtest/lib/python3.5/site-packages/sklearn/model_selection/_split.py", line 610, in _iter_test_masks test_folds = self._make_test_folds(X, y) File "/Users/hoge/.pyenv/versions/anaconda3-4.3.1/envs/opencvtest/lib/python3.5/site-packages/sklearn/model_selection/_split.py", line 597, in _make_test_folds cls_test_folds = test_folds[y == cls] IndexError: too many indices for array

とされてしまいましたがどうにかして実装したいのですがいい方法はないでしょうか?
足りない情報は補足いたしますが、コード全文は記述できませんすみません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2017/07/24 02:50

「過学習が起こり気味」と書いてますが、実際に起きている現象としては、学習データに対するaccuracyは上がっていくのに、評価データに対するaccuracyは上がらない(どころか下がっていく)ということで合ってますか?
guest

回答2

0

ベストアンサー

for train, test in skf.split(x_add,y_add):

のように、splitに引数を2つ与えているので、出てくるのは4つです

for x_add_train, x_add_test, y_add_train, y_add_test in skf.split(x_add, y_add):

蛇足です:
あまり、提示されているリンク先の内容で汎化性能が向上するイメージが私にはありません。
普通にDropoutで頑張った方が良いと思いますが、やっていますよね?

投稿2017/07/24 02:25

編集2017/07/24 02:36
MasashiKimura

総合スコア1150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaitokimura

2017/07/24 02:32 編集

回答ありがとうございます。 dropoutと同様の効果ですか?それならやっていますね…。 あまりにも学習ができないもので困っています。 dropoutを多用したりdropoutの割合を大きくしすぎると収束しないものですか? また、lossが異常に下がった時があったのでうまくいったとおもいましたが、推定結果ではほとんどが猫のように判断されてしまったりうまくいかないことが多いです。
MasashiKimura

2017/07/24 02:34 編集

手法の目的は違います。 わたしには、ひとつのモデルに与えるデータ量の減少による悪影響のほうが大きいように思えます。 もちろんやってみないとわからないですが。 単純にデータを増やしたり、誤識別しやすいデータ外して学習したり(子猫、子犬とか?)するほうが効果があるのではないでしょうか?
kaitokimura

2017/07/24 02:34

まずはそちらでやってみますね。また新たな手法を見つけたり問題点が見つかりましたら質問させていただきますのでよろしくお願いいたします。いつもありがとうございます。
MasashiKimura

2017/07/24 02:34

ドロップアウト率を増やすと学習は遅くなります。パラメータによりますけれど、5倍ぐらいは遅くなると覚悟してください。
kaitokimura

2017/07/24 02:36

パラメータが少なければ少ないほど早く収束するが精度はよくないみたいなことはございますか?
MasashiKimura

2017/07/24 02:38

もちろんパラメータが少ない方が早く収束します。 モデルの大きさはデータ量に依存すると思います。データ量が少なければ、モデルも相対的に小さいほうが予測精度が上がるでしょう。このあたりは議論があるところです。
kaitokimura

2017/07/24 02:45

わかりやすくありがとうございます。理解できました。
guest

0

そもそも、目的と道具が合っていないと思います。
交差検証法はあくまで、そのモデルがどの程度妥当なのかを「検証」する方法であって、過学習を防ぐ方法ではありません。

投稿2017/07/24 02:05

MasashiKimura

総合スコア1150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaitokimura

2017/07/24 02:09

https://lp-tech.net/articles/Y56uo 申しわけございません。 こちらには以下のような記述があり 理論的にも納得はできるのですが意味はないですか? データを複数のグループに分けて交差検証(K-fold)を行うことにより、過学習(訓練用画像に特化した最適化が起きること)を抑制することができます。
MasashiKimura

2017/07/24 02:11

これは交差検証法ではなくアンサンブル学習です。
kaitokimura

2017/07/24 02:12

名前が違うのですね申しわけございません。タイトルや要望の改変もします。このような実装を行いたいです。
kaitokimura

2017/07/24 02:27

上記サイトで記述されたコーディングを参考に書き直しましたが 分割される様子はございません。 普通は1epochの間に5パターンの学習がされますよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問