Kaggle学習の道(三)-Digit Recognizerの構築Tensorflow図

4589 ワード

  • 本編の前提条件を読む:前に問題分析があり、これは第2歩です.最初のステップは次のとおりです.http://blog.csdn.net/memoryjdch/article/details/75220498
  • Tensorflowが分からない場合は、本編を参照してください.大体の概念がわかります.Tensorflowについて詳しく知りたい場合は、公式githubライブラリに移動します.https://github.com/tensorflow/tensorflowまたはTensorflowの公式中国語ドキュメントを移動します.http://wiki.jikexueyuan.com/project/tensorflow-zh/

  • -この記事では、Digit Recognizerの分析について説明します.コードについては、詳細なコメントを書いています.興味があれば、次の手順に進んでください.https://github.com/Skyamz/Data_Recognizer
    一、いくつかの先行問題
    Tensorflowとは?
    Tensorflowは、データストリームのシステムとして理解される.フロントエンドはTensorflow図を構築し,バックエンドはsessionでこの図の計算を実行する.図中はデータを保存しないで、これらのデータはすべて流れて、任意に伝送することができて、Tensorflowはただ1つの計算のフレームワークを構築することを担当して、データを受信した後で、計算の結果は出力します.ここでのデータはテンソル(Tensor)と理解できる.つまりTensorflowに特有のデータです.
    どうしてTensorflowを選んだの?
    私たちのデータ量はとても大きくて、Tensorflowは分布式で、処理が速いです.Tensorflowは前の通俗的な元に基づいて一言をまとめると、ある図のライブラリ(この図はある関係を判断する)を探しに来て、特に画像の特徴の関係を探して、とても正確です.
    Tensorflowは具体的にどのように働いていますか?
    公式サイトの上にずっと掛けてある図を置いてください.この図にはボリューム層とpooling層がないので、回帰モデルと呼ぶしかありません(ボリューム層とpooling層は後述します).まずこのgifを見てみましょう.
    Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图_第1张图片
    各ノードは動作であり、流れる黒い線は伝送されるデータ、すなわちテンソルである.仕事の過程を大体まとめることができます.
  • はまずinputから始まり,1層1層の上向きにForward計算を行う.
  • データはRelu層(このReluは活性化関数に相当し、主な機能は負の数を排除する)
  • を通過する.
  • データは回帰層
  • を通過する.
  • 最後のcross entroyを計算すると勾配の計算が開始される.勾配を計算する際,重み行列Wとオフセットベクトルbiasを構築する.

  • ここではTensorflowのアーキテクチャの問題に関連しています.今回のプロジェクトとは何の関係もありませんので、ここでは詳しく説明しません.興味があれば、次の手順に進んでください.http://www.jianshu.com/p/a5574ebcdeab
    データはいったいどうやって読み取ったのですか?またどのようにデータがこの図を出したと判断して、計算を始めますか?
    ここではまず、epochsという名詞を導入します.どういう意味ですか.私は今40000行のデータを持っていて、私はこれらのデータをTensorflow図の中に置くたびに完全に走って、epochsは+1します.つまり、データセットを完全に計算した回数を表します.ここでは,構造図と計算データを2つのステップに分け,これは2つのスレッドと理解できる.一般的に、データ計算を行うときは、まずメモリキューにデータを読み込み、計算を担当するスレッドがメモリキューからデータを取り出すとokになります.現在epochsが導入されていますが、データ全体を何度も計算したいのではないでしょうか.
    Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图_第2张图片
    ファイル名キュー+メモリキューデュアルキューの形式でファイルを読み込み、epochsを容易に管理できます.100行目のデータをファイル名キューに入れ、50はepochsとして動作し、100行目の最後にend(終端)を設定します.メモリキューはファイル名キューからデータを読み込み、50行ずつepochs+1、endまで読み終わる.
    二、CNNを構築してデジタル手書き体識別問題を解決する
    まず、解決プロセスのフレームワークをプレビューし、各ステップの意味を説明します.
    Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图_第3张图片
    コンボリューション
    ボリューム操作手順:3*3のボリュームコアで6*6のマトリクスフローをボリューム解除します:Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图_第4张图片ここではSAME方式を使用しています.
    プール化
    プール化操作プロセス:3*3のマトリクスで6*6のマトリクスフローをプール化し、9つの数の中で最大を選択します.この操作はmax pooling:Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图_第5张图片と呼ばれます.
    緊密な接続層の確立
      は第1層の処理を経て、ピクチャサイズは従来の28*28から7*7になり、64の特徴値がある.このステップでは、1024個のニューロンを有する緊密な接続層を追加し、各ニューロンは前の層の出力に接続されている.
    Dropout
      はDropout技術を用い,主にオーバーフィットを防止するためである.dropoutは主に有効パラメータの数を減らす.Dropoutは、各トレーニングフェーズでネットワークからノードを削除します.各ノードまたはkeep_prob確率はネットワークに保持されるか、確率1-keep_で保持される.prob破棄.トレーニングフェーズが終了すると、ノードは元の重みでNNに返される.dropoutのいくつかの一般的な解釈を見てください.http://blog.csdn.net/stdcoutzyx/article/details/49022443
    Softmax層
      softmaxレイヤを追加します.softmaxモデルは、異なるオブジェクトに確率を割り当てるために使用できます.例えば,1枚の画像が9の確率で80%,8の確率で5%であると判断する確率はsoftmaxで割り当てられる.
                              memoryjdch   2017-07-20