‫これで､ 10,000枚の画像からなるトレーニングデータセットに対して､ 完全に学習されたモデルが完成しました｡
‫1万枚の画像とラベルがあるんです｡
‫それでは､ 完全に学習されたモデルを使って､ いくつかの予測をしてみましょう｡
‫同じく約1万枚の画像からなるテストデータセットについて｡
‫ちょっと見てみましょう｡
‫でも､ Kaggleに上がってきて見てみましょう｡
‫彼らは私たちの予測を見ようとするのです｡
‫つまり､ テストセットの各画像に対するサブミッションファイルは､ 異なる品種ごとに確率を予測する必要があるのです｡
‫ファイルはヘッダーを含み､ 以下のフォーマットである必要があります｡
‫だから､ IDドッグブリードワンが必要なんです｡
‫アフガン・ハウンド､ ヨークシャー・テリア､ そしてこれらすべての予測確率をもう一度発音してみる振りもしません｡
‫わかりました｡
‫今はmulticlass log lossと表示されています｡
‫あくまで犬種ごとの予測確率です｡
‫テストデータセットで予測を行う別のヘッダーセクションを作成します｡
‫さて､ コードを書き進める前に､ 少し考えてみてほしい｡
‫学習用画像でモデルを学習させるためには､ 何をすればよかったのでしょうか？
‫もう一度言いますが､ これはデータにとらわれないということにしてください｡
‫扱うデータがテキストであれ､ 音声であれ､ 画像や動画であれ､ どんなものであれ､ です｡
‫機械学習モデルで使う前に､ 私たちのルールとは何なのか？
‫私たちの場合は､ ディープラーニングのニューラルネットワークですね｡
‫数字に変換しなければならないのです｡
‫つまり､ モデルがトレーニングされたのと全く同じデータ型にする必要があるのです｡
‫この画像のデータバッチは､ テスト画像から作成する必要があり､ その画像に対して予測を行うことができます｡
‫そこで､ 我々のモデルは数十バッチという形で画像を学習させているので､ 自分たちで少し書き込んでおきます｡
‫テストデータで予測を立てること｡
‫同じフォーマットにする必要がありますね｡
‫そこで､ 私たちのグラフィックとキーノートに戻ると､ 私がいつも言っていた「インプットにフォーカスする」ということを思い出します｡
‫つまり､ データを機械学習アルゴリズムに適した形に整え､ その出力が正しいかどうかを確認するのです｡
‫これが､ 私たちが最初に重視することです｡
‫これは､ すでにかなり大きな形で私たちに実装されています｡
‫もっと深く､ もっと深く､ さらなるプロジェクトに参加するようになれば､ このことに飛び込むようになるかもしれませんね｡
‫しかし､ 当面の間､ そして今のように最初のプロジェクトにアプローチするためには､ インプットとアウトプットに焦点を当てることになります｡
‫さて､ ここでちょっとした小ネタですが､ やはりこの機能は便利です｡
‫幸いなことに､ 先ほどデータバッチの作成を行ったので､ ファイル名のリストを入力として受け取ることができる｡
‫もし覚えていなければ､ データバッチを作成し､ テンソルバッチに変換するところまで戻ってください｡
‫では､ テストデータで予測をするためには､ どのような手順を踏めばよいのだろうか｡
‫それらを書き出して､ テストデータの予測をしてみましょう｡
‫さて､ これは私が多くのプロジェクトで行っていることなのですが､ ただ自分に言い聞かせるように､ 自分自身を説得するのです｡
‫ラバーダッキーという手法
‫そこで､ テスト画像のファイル名を取得します｡
‫そのためには､ これまでと同じように､ ほんの少し一覧性を持たせた文章を書くことになります｡
‫テストにアクセスするには､ ここにあるすべてのファイルを調べて､ ファイル名をある種のリストに保存してください｡
‫ええ､ できますよ｡
‫そして､ create data batchesを使って､ ファイル名をテストデータのバッチに変換することになったのです｡
‫そしてセッティング｡
‫テストデータです｡
‫データバッチを作成するためのパラメータを作成したのを覚えていますか？
‫そうでなくても､ いいんです｡
‫私たちは､ 第二のパラメータをtrueに見るつもりです､ なぜですか？
‫テストデータとトレーニングデータで何が違うのか？
‫テストデータにはラベルがないんです｡
‫テストデータにはラベルがないので､ 最後にテストデータのバッチをpredictに渡してpredictionsの配列を作ります｡
‫我々のモデルで呼び出されるメソッド｡
‫Woo!
‫そこで3つのステップを得たのです｡
‫しかし､ 私たちはそれらを行うことができます｡
‫1つ1つ取り組めばいいのです｡
‫まずは､ 最初の1枚からいかがでしょうか｡
‫それはかなり論理的ですね｡
‫テスト画像ファイル名を読み込む｡
‫私たちに何ができるのか？
‫ファイル名をテストしに行くのもありですね｡
‫シンプルで素敵なイコール｡
‫実は､ テストパスを設定することがあります｡
‫どうでしょう？
‫テストパスイコール｡
‫2回書くのを省くために､ ここにコピーしておきます｡
‫コピーパスです｡
‫ちょっとした便利グッズですね｡
‫できるんですね｡
‫貼り付けることができます｡
‫コンテンツは必要ない｡
‫その気になればそのままでも良いのですが､ 削除します｡
‫だから､ 他のパスと整合性が取れているのです｡
‫そして､ これをここに置くことにします｡
‫というわけで､ testフォルダへのパスです｡
‫では､ 次に小さなリストを作ってみましょう｡
‫理解度は､ テストパス＋oのドットリストdirのf名のファイル名と等しい｡
‫テストパス
‫以前､ オリジナルのトレーニングファイル名を再作成するときに見たことがありますが､ この機能が何をしているのか思い出してみましょう｡
‫Oさんのドットリスターは､ このディレクトリを通過しているだけなんですね｡
‫その略です｡
‫Python､ このフォルダにあるすべてのファイル名を取得して､ テストパスを追加するリストを作成しています（テストパスとすべてのファイル名の合計）｡
‫テストフォルダです｡
‫見てみよう｡
‫疑わしい場合は､ コードを実行してください｡
‫素晴らしい｡
‫これで､ テストデータのファイル名が揃いました｡
‫それを外せばいいんです｡
‫緑色のダニの絵文字を出す｡
‫このノートも､ 最後にはいっぱいになりそうです｡
‫よし､ これで決まりだ｡
‫次のステップは何だろう？
‫データバッチの作成でファイル名をテストデータバッチに変換する｡
‫あ､ そこでデートって言っちゃいましたね｡
‫それは間違いです｡
‫これでよしとしよう｡
‫直してください｡
‫まず最初に､ テストファイル名の長さを少しチェックして､ 何枚の画像があるか確認しましょう｡
‫10,357.
‫素晴らしい｡
‫では､ 次にデータバッチの作成ですが､ これはとても簡単です｡
‫私たちは機能を持ち込むだけです｡
‫テストデータを取りに行く｡
‫事前にこちらでコメントを書かせていただきます｡
‫そこで､ テストデータを作成します｡
‫バッチリです｡
‫そして､ データバッチの作成に入ります｡
‫ああ､ これは私たちが何を話しているのかを知っていて､ そしてテストファイル名を渡すつもりなんだ｡
‫そして､ テスト用のデータプレーンも見てみましょう｡
‫そこで､ test data equals trueとします｡
‫そして､ それを実行する｡
‫素晴らしい｡
‫テストデータのバッチを作成するという小さなプリントアウトが表示されます｡
‫そんな素晴らしい機能を､ 私たちは書きました｡
‫ここに来て､ もう一度見てみましょう｡
‫データをバッチにする
‫そこで､ データバッチを作成する機能､ データバッチを作成する機能を用意しました｡
‫そして､ テストデータの場合はどうするかというと､ この小さなステートメントをプリントアウトして､
‫「おい､ ファイル名を時制に変えて､ 何十ものスライスからテンソルデータセットに変換して､ プロセスイメージ関数をマッピングしてデータバッチを作るんだ」となるわけです｡
‫テストデータセットにはラベルがないので､ 画像ラベルの取得は行わないことを忘れないでください｡
‫そこで､ 学習データと同じように画像を処理し､ それをバッチ（この場合はサイズ32のバッチ）に変換して､
‫GPUで高速に計算できるようにします｡
‫では､ 元の場所に戻ってみましょう｡
‫それが､ 私たちです｡
‫そして､ テストデータにすると
‫形が悪いデータなんです｡
‫だから､ ここにはラベルがないんです｡
‫TensorFlowのfloat型のカラーチャンネルに対して､ 2～4×2～4×3の画像を並べただけです｡
‫とても美しい｡
‫テストデータはテンソルバッチという形で手に入れた｡
‫それが､ 私たちの目指すところです｡
‫そしてフィナーレは､ ここに来て､ 最初に関数を書いておいたことがどれだけ便利だったかを確認することができます｡
‫フォームモデルを作成し､ データバッチを一発で作成しました｡
‫今度は予測配列を作ってみます｡
‫では､ どうすればいいのか｡
‫読み込んだフルモデルを使って､ テストデータバッチで予測する｡
‫わかりました｡
‫だから､ 予測をテストする｡
‫ロードされたフルモデルのドット予測に等しい｡
‫テストデータです｡
‫4つの弓が1つになるように設定します｡
‫素晴らしい｡
‫さて､ 注意していただきたいのは､ かなり長い時間がかかるということです｡
‫理由は､ このセルノート呼び出しを実行する前に､ ここにちょっとしたメモを入れておくからです｡
‫CPUで動いているのに｡
‫これはちょうど､ 私たちの携帯電話の機種をトレーニングするようなものです｡
‫そこで､ フルモデルに対してpredictを呼び出して､ それを渡すのです｡
‫テストデータ・バッチの実行に時間がかかる｡
‫そして､ 1時間くらいになるのかな｡
‫1時間くらいでいいんです｡
‫とにかくそういうことがわかったんです｡
‫理由は､ ここにさらに1万枚の画像があるからです｡
‫そして､ 私たちがやらなければならないことは､ ロードされた4つのモデルを手に入れることです｡
‫つまり､ ロードされたフルモデルがトレーニングデータセットで学習したすべてのパターンがあるわけです｡
‫そういうプロセスを経なければならないのです｡
‫テストファイル名またはテストデータバッチに含まれる1万枚の画像です｡
‫そして､ そのテストデータから見つけたパターンに基づいて､ それらを予測する｡
‫そこで､ verboseを1にセットして､ これを実行すると､ 何が起こっているのかを更新するために､
‫もう一つ小さなタイムステップを与えてくれます｡
‫では､ 早速ですが､ これを実行してみましょう｡
‫そしてロードされるのを待ち､ また同じことをするのです｡
‫動画はすべて高速化され､ 瞬時に読み込まれるようになります｡
‫現実には､ このセルを動かすのにしばらく時間がかかるでしょう｡
‫現実には､ このセルを動かすのにしばらく時間がかかりそうです｡
‫でも､ それを見せるためにやっているんです｡
‫ロードして､ ETAメッセージを作成し､ テストデータで予測を行うという流れです｡
‫だから､ ちょっとだけ待ってみよう｡
‫これは上がりますね｡
‫これでよしとしよう｡
‫で､ ETA､ 約38分｡
‫324のバッチを経なければならないのです｡
‫というのも､ 10,357÷32で行くと､ 10,357になるからです｡
‫それを四捨五入して324になるんです｡
‫あの数字はそこからきているんです｡
‫なるほど｡
‫だから､ 私はこのまま待つつもりです｡
‫も通過するのを待つ必要があるかもしれません｡
‫実際には待つ必要はありません｡
‫数秒後に戻ってきますので､ ここでビデオを一時停止して､ 3､ 2､ 1､
‫で戻ってくることにします｡
‫さて､ ここでちょっと生意気なことを書いてみました｡
‫ご覧の通り､ あと1時間ほどありますが､ ここで座って待っている方がいいと思ったので｡
‫実は､ 優秀なシェフなら誰でもやっていることなんです｡
‫先に料理を仕込んだので､ 実はこの工程を経て､ 1時間フルに待ったことになります｡
‫そして今､ あなたは自分のものが通過するのを待つことができました｡
‫でも､ もしテスト予測のCSVをあらかじめ作っておいてダウンロードしたい場合は､ 資料のところに添付しておきますので､
‫その時間いっぱい待つ必要はありませんよ｡
‫このセルを動かす前に言っておくべきだったかもしれませんが､ 足元を固めてから､
‫よりよい方法を考えるのはいいことです｡
‫もし､ テスト実行後にテスト結果をCSVファイルに保存するようにしたい場合､ テストが完了するのを1時間待って､
‫何らかの理由でランタイムが切断されて保存されなかったら､ かなり残念なことになりますね｡
‫そこで､ np save textというこの関数を使って保存することができます｡
‫この実行中にdocstringを読み込むのでしょうか？
‫それはないと思います｡
‫しかし､ これは何をするものかというと､ このスプレッド配列を忘れてしまったのです｡
‫ということで､ これで終了としましょう｡
‫このセルを後に走らせたら､ テスト予測が保存されそうです｡
‫つまり､ このnumpy配列は､ 予測確率の配列を､ デリミタがカンマ4､ カンマ区切りの値でCSVとしてこのファイルに出力しているのです｡
‫そして､ 一度保存されたものが表示されるようになるのです｡
‫CSVというファイル名をつけたので､ それをNPロードテキストでロードし直せばいいのです｡
‫では､ どうするか？
‫このまま終わるのを待つよりも､ その様子を実際にお見せしましょう｡
‫これは､ 私が過去にフルモデルで行った予測確率です｡
‫というわけで､ あと1時間くらいで打ち止めです｡
‫だから､ 1時間くらいかかるという私の予測は､ またしても間違っているのです｡
‫だからキーボード割り込み｡
‫これでよしとしよう｡
‫すでに配列に保存してあるので､ 実行はしませんが､ これを実行するつもりです｡
‫では､ このセルが完成した後に実行したことにしてみましょう｡
‫このETAがゼロになったわけです｡
‫そこで､ この配列をCSVファイルから読み込むことにします｡
‫美しい｡
‫では､ 最初の10個を見てみましょう｡
‫これでよしとしよう｡
‫つまり､ これらはすべて1万枚の画像に対する予測確率なのです｡
‫では､ テスト予測の形状を見てみましょう｡
‫10,357.
‫つまり､ これだけのテスト画像があるわけです｡
‫そして､ それぞれの予測確率は120種類｡
‫さて､ この数値は以前にも見たことがあります｡
‫で､ 思い出していただきたいのは､ このまま､ どこまでも走らせて､ さっきのCSVをファイルに保存して､ まるでさっき何かを作ったかのように､
‫ここに再読み込みしたところなんです｡
‫ランタイムが切断された場合､ このファイルをどこかに保存しておいて､ 後でアクセスできるようにしたい｡
‫それで､ 次のミッションは何でしょう？
‫この予測配列をKaggleに提出するとしたら､ どのようなものになるのでしょうか？
‫というわけで､ サンプル提出はこちら｡
‫あ､ 何かあったんですね｡
‫データにさせるんですね｡
‫それはあまり面白くないですね｡
‫でも､ 幸いなことに､ このファイルはドッグビジョンにあります｡
‫そして､ それは同じ方法です｡
‫それをダウンロードして､ Googleシートで開いただけなんです｡
‫というわけで､ こんな感じです｡
‫これは､ 予測値の配列をこのような形にするために必要なサンプル送信です｡
‫IDの列と､ 犬種ごとの列と､ その予測確率ですね｡
‫ということで､ 次回のビデオではそれを目指します｡
‫ドッグビジョンの予測確率の配列を取得したり､ 実際にKaggleの犬種判別のフォーマットに戻ったりしています｡
‫そうすれば､ Kaggleに予測結果を提出することができます｡