ディープのベストプラクティスを学びます

  • 公衆からのこの記事は最初の数:RAISは、注意を歓迎します。

ベストプラクティスは、定義によって、ほとんどの場合は最高でなければならないコースの何かを行うための最善の方法、であるが、これは百パーセントではない、我々はもつれにこの問題を持っていない、私たちは覚えておく必要があります以下のとおりでありますこれらの方法では、深さの学習の練習では非常に良い習慣です。

コールバックメカニズム

あなたがここに表示された場合、私はあなたには、いくつかの開発経験プログラマはプログラミングを理解持つように設計されたプログラムである知っていることを信じる理由を持って、その場合には、あなたは確かにコールバックには見知らぬ世界ではない、コールバックは、オブザーバーデザインパターンの一種で、I有料に似ていますあなたが実行するタスクを与え、私は自分の仕事をするために最後のアカウントに継続する、とあなたが轢か、結果にかかわらず良いか悪いか、あなたは私に結果を伝える必要があり、これは、コールバックの意味です。

私たちの以前の研究の様々な深さの場合には、パラメータが常に存在するネットワークモデルのループ反復回数、時間の始まりを意味エポック、である、私たちは、その後、ネットワークの訓練とは、パラメータを調整だから、大きな価値を提供しますそのオーバーフィッティング状態、私たちがどのような状況に最適なネットワークの下に知ることができる唯一の方法を確保するために、合計であることを、モデルのパラメータを調整する過程でエポック。前の例のほとんどでは、それが私たちのネットワークはすぐに訓練を受けたので、これは何も影響を与えないように、許容時間内に完了することができない場合には大きなデータセットは、存在しないことも可能合理的であるが、いくつかありますこのよう前述のリカレントニューラルネットワークなどの例外、トレーニング時間はあなたにビットせっかちを行うことができ、このハイライト問題のうち、我々はこの問題を解決する必要があります。

私たちは、ループの反復回数は、我々は、アイデアは魅力が私たちの訓練ネットワークに変更することができるかどうかの問題を解決することを、再鉄道ネットワークに、その臨界点を設定し、独自のだろうと、どこあまりにもフィッティングを開始する見つけるために、トレーニングプロセスでデータを表示しますあなたは自動的に停止後、オーバーフィッティング(またはデータは有意な変化を示さなかった)を判断するために開始し、かつなかったとき、当然、コールバックは、この問題に対処するための最良の方法です、そして今深い学習フレームワークのほとんどすべての種類は、このような方法を提供し、具体的にどのようにそれを行うには?私たちは、ここでは3つの一般的な例であり、いくつかのニュアンスが異なるフレームワークにある使用している場合、注意を払ってください、まだKeras例ありました。

# 定义需要哪些 callback
callbacks_list = [
    # 当所监控的数据不再增长,停止训练
    keras.callbacks.EarlyStopping(
        monitor='acc',
        patience=1,
    ),
    # 每轮训练都进行一次模型参数的保存,
    # monitor 表示如果监控数据没有改善(自动推断,还可用 mode 参数控制),不进行保存
    # save_best_only=True 时:
    #   val_loss: 自动推断 min
    #   val_acc: 自动推断 max
    keras.callbacks.ModelCheckpoint(
        filepath='point_model.h5',
        monitor='val_loss',
        save_best_only=True,
    ),
    # 当评价的指标没有提升时,减小学习率
    keras.callbacks. ReduceLROnPlateau(
        monitor='val_loss' 
        factor=0.1,    # 减小 10 倍学习率,2 或者 10 倍是常用值
        patience=10,   # 10 次迭代没有改善
    )
    # 当然,还可以自定义一些,keras.callbacks.Callback 的子类
]
model.fit(callbacks = callbacks_list)

TensorBoard

TensorBoardのために、我々温家宝前のニューラルネットワーク手書き数字認識は、私たちはその訓練されたネットワークモデルを知っていると言うが、ネットワークを実行する方法を具体的に知っていないとき、で述べたように、あなたがブラウザをすることができ、TensorBoardビューを視覚化する必要がありますこれと同様の図で、:

画像

画像

コード上記のコールバックとほぼ同じことを達成するために:

from keras.callbacks.tensorboard_v2 import TensorBoard
callback_list = [
        keras.callbacks.TensorBoard(
            log_dir='./logs',
            histogram_freq=1,
            embeddings_freq=1,
        )
    ]
model.fit(train_images, train_labels, epochs=5, batch_size=128, callbacks=callback_list)
# shell 中:tensorboard --logdir=logs
# 浏览器:http://localhost:6006/

私は別のがあるでしょう、私はあなたが戻って、ルックを行く提案、それは献身的なTensorBoardの記事はありません、違う感じがあるでしょう、あなたは今、以前のデータエクスポートの内容を見て信じています。もちろん、小さなエピソードがあり、このコールバックに対応していないKerasとTensorFlowの最新の公式バージョンはすでにここでは関係、GitHubの問題を修正し、文句を言うだろう:https://bit.ly/2QDtXqN号2月20日変更は、私は新しいバージョンは、この修正後まもなくリリースされると信じています。

次に、我々はパフォーマンス関連のコンテンツを学習の深さを改善する方法について説明します。

先進的なデザインパターンの使用

メソッドのデザインパターンは、設計パターンが若干異なる学習の深さで、多くの場合、一般的なプログラミングのベストプラクティスの一つです。残留接続、およびバッチ標準分離畳み込みの深さ:ここで3つの設計パターンを含みます。

残留接続

画像

使用して上述する層の一部の後ろに入力トレーニングなどの機能のプログラミング方法、フロント層の出力を説明し、問題を解決するために、勾配のボトルネックの消失によって示されます。

バッチの標準化

標準化は、バッチの標準化され、これまで見てきた上記方法の標準化は、ゼロの平均値および1の標準偏差は、ではないように、それぞれ、すべてのデータをしようマイナス平均値、およびその後の標準偏差で割った値標準正規分布(コンピュータが数学を硬化さ)を考え、右、それは方法です!

承認された標準化されたアプローチは、トレーニング中畳み込みニューラルネットワークは入力分布のそれぞれの層は、効果は非常に良いですが、また、特定の原則紙、後であなたに話が、私たちは知っていますか、同じまま訓練は、パラメータ調整も簡単ですので、それほど厳しいの学習率は、短期では、クールがそれであるため、分類の効果を高め、大幅に高速コンバージェンスプロセスが大幅に加速されています。

ここで私は、バッチ標準化は勾配拡散を助け、特により深いネットワークのいくつかのために、指摘しなければなりません。Keras対応するコード緻密層又は層、オファーコードで使用されるコンボリューション後、BatchNormalizationあります。

conv_model.add(layers.Conv2D(32, 3, activation='relu'))
conv_model.add(layers.BatchNormalization())
​
dense_model.add(layers.Dense(32, activation='relu'))
​dense_model.add(layers.BatchNormalization())

分離可能な畳み込み深さ

深練習分離畳み込み(SeparableConv2D)入力層はポイントによって別々に空間畳み込み、畳み込みポイントを実行した後、出力チャンネルを混合し、その引数以下、より浮動小数点ので、いくつかの場合Conv2D層に置き換えることができます優れた効率を持つ小型のため、軽量モデルです。

画像

以下に、画像分類コードの例です。

model = Sequential()
model.add(layers.SeparableConv2D(32, 3, activation='relu', input_shape=(64, 64, 3,)))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
model.add(layers.MaxPooling2D(2))
model.add(layers.SeparableConv2D(64, 3, activation='relu'))
model.add(layers.SeparableConv2D(128, 3, activation='relu'))
# 极大的减少运算量
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')

ウルトラパラメータ最適化

これらのパラメータは、スーパーパラメータと呼ばれる、バッチなどの標準化の必要性、どのような活性化関数で、多くの層を積み重ねる:意思決定は、多くの場合、あなたのズボンの座席行われたときに私たちは、ネットワークモデルを構築しました。通常、我々は、モデルパラメータの内部ノード、パラメータは、ネットワークトレーニングプロセスを指し呼び出して、このパラメータは重要ではありません。

同じ、この超パラメータはまた、すべての後に、マシンに応じて、プログラマを、それを考慮していないことを、私たちはあまりにも複雑なパラメータ調整が大きすぎる知っているので、我々は規制の基礎としてフィードバック信号を調整するために、マシンのメイク使用を人間そのようなAのことを行う、プログラマはこの作業の完了を自動化するコードを記述します。結論はどのような場合には、マシンが行われる必要があるということですので。

ただし、パラメータを最適化するこの方法は、特に良好な特に良好な統一されたアプローチではない、プロセスは、一般に読み取り(または自動生成された)パラメータのセットを構築し、モデルを訓練され、再びパラメータの他のセットと、結果を保存しましたモデルのトレーニング、優れているの結果は、それが最善の引数であることを最後の引数を取得するには、その繰り返しに、ある程度の時間を良い結果を残します。このパラメータは、トレーニングセットを検証するために、実際にスーパーレギュレータですが、また、これは注意が必要であることを当てはめると考えていることに注意してください。

もちろん、特定のアルゴリズム上のパラメータを調整するこの方法は、典型的なベイジアン最適化アルゴリズムが有効ではないかもしれないです、状況があまりにも複雑になっている、これはただ一つの方法である、これは大きな問題で、後であなたに話です。

モデル統合

この問題に対処するために、競争や生産環境では、一般的に有効であり、調査研究では限られた役割は、それが注目されるべきです。、私は別のネットワークモデルと方法を訓練、結果はかなり良いです、同じデータセットを持っている統合モデル、いわゆる、そのそれぞれよりも結果をその結果、彼らの重みを結合するかもしれませんより良いです。

これを説明するには?いくつかのモデルは、多くの行を懸念している例としてではないので、正確な、画像の分類、および、いくつかのモデルは色に焦点を当て、彼らは、線の色にフォーカスし、注意の両方に一緒に彼らのモデルを入れて、最終的な結果は良くなります換言すれば、それはデータの異なるモデルのさまざまな側面に焦点を当てることで、データのより完全な3次元解析は、当然のことながら、結果として得られる効果は良好です。もちろん、これはまた、統合されたモデルを必要とそうでない場合、トラブルが続いている、あなたはよく理解され、この統合モデルを、無駄になり、また良いです。

概要

ディープ学習が大きな問題である、ベストプラクティスはそんなに、ここでは高い確率ではない持って成熟し、未熟な効果的な方法、開発段階では、まだいくつかの方法が、すべての詳細は、ニューラルネットワークトレーニングプロセスの途中になっていますそうでのみ有効で最高であること、未熟は、ここでの議論の価値がある成熟し、言うことは難しい、これはここで終了することがあります。

  • 公衆からのこの記事は最初の数:RAISは、注意を歓迎します。

おすすめ

転載: www.cnblogs.com/renyuzhuo/p/12547422.html