CNTK-最初のニューラルネットワークの作成
この章では、CNTKでのニューラルネットワークの作成について詳しく説明します。
ネットワーク構造を構築する
CNTKの概念を適用して最初のNNを構築するために、NNを使用して、がく片の幅と長さ、および花びらの幅と長さの物理的特性に基づいてアヤメの花の種を分類します。さまざまな種類のアイリスの花の物理的特性を説明するアイリスデータセットを使用するデータセット-
- がく片の長さ
- がく片の幅
- 花びらの長さ
- 花びらの幅
- クラスすなわちアイリスsetosaまたはアイリスversicolorまたはアイリスvirginica
ここでは、フィードフォワードNNと呼ばれる通常のNNを構築します。NN −の構造を構築するための実装手順を見てみましょう。
Step 1 −まず、レイヤータイプ、活性化関数、NNの入力変数を定義できる関数などの必要なコンポーネントをCNTKライブラリからインポートします。
from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu
Step 2−その後、シーケンシャル関数を使用してモデルを作成します。作成したら、必要なレイヤーをフィードします。ここでは、NNに2つの異なるレイヤーを作成します。1つは4つのニューロンを持ち、もう1つは3つのニューロンを持ちます。
model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])
Step 3−最後に、NNをコンパイルするために、ネットワークを入力変数にバインドします。4つのニューロンを持つ入力層と3つのニューロンを持つ出力層があります。
feature= input_variable(4)
z = model(feature)
活性化関数を適用する
選択できる活性化関数はたくさんあり、適切な活性化関数を選択することで、ディープラーニングモデルのパフォーマンスに大きな違いが生まれます。
出力層で
を選択する activation 出力層での関数は、モデルで解決しようとしている問題の種類によって異なります。
回帰問題の場合、 linear activation function 出力層で。
バイナリ分類問題の場合、 sigmoid activation function 出力層で。
マルチクラス分類問題の場合、 softmax activation function 出力層で。
ここでは、3つのクラスのいずれかを予測するためのモデルを構築します。それは私たちが使用する必要があることを意味しますsoftmax activation function 出力層で。
隠された層で
を選択する activation 隠れ層の機能では、パフォーマンスを監視してどの活性化関数が適切に機能するかを確認するための実験が必要です。
分類問題では、サンプルが特定のクラスに属する確率を予測する必要があります。だから私たちは必要ですactivation functionそれは私たちに確率的な値を与えます。この目標を達成するために、sigmoid activation function 私たちを助けることができます。
シグモイド関数に関連する主要な問題の1つは、勾配消失問題です。このような問題を克服するために、ReLU activation function これは、すべての負の値をゼロに変換し、正の値のパススルーフィルターとして機能します。
損失関数の選択
NNモデルの構造ができたら、それを最適化する必要があります。最適化するには、loss function。とは異なりactivation functions、選択できる損失関数が非常に少なくなっています。ただし、損失関数の選択は、モデルで解決しようとしている問題の種類によって異なります。
たとえば、分類問題では、予測されたクラスと実際のクラスの差を測定できる損失関数を使用する必要があります。
損失関数
分類問題については、NNモデルで解きます。 categorical cross entropy損失関数が最適な候補です。CNTKでは、次のように実装されますcross_entropy_with_softmax からインポートすることができます cntk.losses パッケージ、次のように-
label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)
指標
NNモデルの構造と適用する損失関数があれば、深層学習モデルを最適化するためのレシピの作成を開始するためのすべての要素が揃っています。しかし、これを深く掘り下げる前に、メトリックについて学ぶ必要があります。
cntk.metrics
CNTKには次の名前のパッケージがあります cntk.metrics使用するメトリックをインポートできます。分類モデルを構築しているので、classification_error 0から1までの数値を生成する行列。0から1までの数値は、正しく予測されたサンプルのパーセンテージを示します。
まず、からメトリックをインポートする必要があります cntk.metrics パッケージ-
from cntk.metrics import classification_error
error_rate = classification_error(z, label)
上記の関数は、実際にはNNの出力と入力として期待されるラベルを必要とします。