画像を同時に2つ入力しよう
犬と猫の画像があり、これを識別するネットワークを作るイメージと理解しました。
画像自体がx_○○
、犬や猫のラベル(正解情報)がy_○○
に当たります。この時、ラベルをクラスと表現することがあると思います。例えば、犬のクラスが0、猫のクラスが1、画像が10枚あれば、y_train = np.asarray([0,1,1,0,1,0,1,0,1,1])
のような感じです。
※もしTensorflowを使うのであれば、ラベル情報の最小値は0から始まらないと学習がまともにできない(1から始まるといくら学習しても学習の正解率がゼロになります)ので注意してください。
クラス:犬、猫等に相当。数値で言えば0,1,2,...
ラベル:画像とセットの正解データ。pythonで言えば、np.asarray([0,1,0,0,1,1,...])
学習させる時には、model.fit(x_train, y_train)
のような形になります。
評価する時には、model.predict([何かしらの画像])
となります。もし評価画像が二枚あるのであれば、model.predict([画像1,画像2])
のようになります。
この時、学習時も評価時も、通常のフォーマットは(枚数,幅,高さ,ch数)の形式です。
データの配列を2つ用意しておかないといけないのでしょうか?
いけなくはないですが、これをしないとイカサマ状態になってしまいます。両方同じデータでも動くは動きますが、過学習が検出できません。
例えば、学校のテストでヤマを張ってヤマが丸ごと出てきたときには対応できても(本当に覚えた、というよりも過適合している状態です)、ヤマ以外の問題が出てきたときに対応できない(本当はちゃんと覚えていなかったことが露呈)となると思います。機械学習でこの過適合を検出するための準備処理が上記の分割処理です。
具体的には、「x_train,x_testに分ける理由は、学習用のデータと、学習できているかのテスト用(学習には使わない、テスト用のためだけのデータ)に分け、学習時した結果に汎化性があるかどうかを検証するデータを用意するため」です。
自前でデータを用意する時には、まとまってデータを用意して(例えば1000個)、8-9割を学習用、1-2割をテスト用に割り振ります。
※このような方法を「ホールドアウト法」と呼んでいます。データが少ない場合には「クロスバリデーション法」(使うデータを切り替えながらホールドアウト法を複数回行う方法)も用いられます。
これでいかがでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/13 07:22