CNTK-回帰モデル

ここでは、回帰モデルに関するパフォーマンスの測定について学習します。

回帰モデルの検証の基本

回帰モデルは分類モデルとは異なることがわかっているので、個人のサンプルの正誤のバイナリ測定値はありません。回帰モデルでは、予測が実際の値にどれだけ近いかを測定する必要があります。予測値が期待される出力に近いほど、モデルのパフォーマンスは向上します。

ここでは、さまざまなエラー率関数を使用して、回帰に使用されるNNのパフォーマンスを測定します。

エラーマージンの計算

前に説明したように、回帰モデルを検証している間、予測が正しいか間違っているかを判断することはできません。予測をできるだけ実際の値に近づけたいと考えています。ただし、ここではわずかな許容誤差が許容されます。

許容誤差の計算式は次のとおりです。

ここに、

Predicted value =帽子でyを示す

Real value = yによって予測

まず、予測値と実際の値の間の距離を計算する必要があります。次に、全体的なエラー率を取得するには、これらの2乗距離を合計し、平均を計算する必要があります。これは、mean squared エラー関数。

ただし、許容誤差を表すパフォーマンスの数値が必要な場合は、絶対誤差を表す式が必要です。の式mean absolute 誤差関数は次のとおりです-

上記の式は、予測値と実際の値の間の絶対距離を取ります。

CNTKを使用した回帰パフォーマンスの測定

ここでは、CNTKと組み合わせて説明したさまざまなメトリックの使用方法を見ていきます。以下の手順を使用して、自動車の1ガロンあたりのマイル数を予測する回帰モデルを使用します。

実装手順-

Step 1 −まず、必要なコンポーネントをからインポートする必要があります cntk 次のようにパッケージ-

from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu

Step 2 −次に、を使用してデフォルトの活性化関数を定義する必要があります。 default_options関数。次に、新しいシーケンシャルレイヤーセットを作成し、それぞれ64個のニューロンを持つ2つの高密度レイヤーを提供します。次に、追加の高密度レイヤー(出力レイヤーとして機能します)をシーケンシャルレイヤーセットに追加し、次のようにアクティブ化せずに1つのニューロンを与えます-

with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])

Step 3−ネットワークが作成されたら、入力フィーチャを作成する必要があります。トレーニングに使用する機能と同じ形状であることを確認する必要があります。

features = input_variable(X.shape[1])

Step 4 −次に、別のものを作成する必要があります input_variable サイズ1。NNの期待値を格納するために使用されます。

target = input_variable(1)
z = model(features)

ここで、モデルをトレーニングする必要があります。そのために、データセットを分割し、次の実装手順を使用して前処理を実行します。

Step 5−まず、sklearn.preprocessingからStandardScalerをインポートして、-1から+1までの値を取得します。これは、NNでの勾配問題の爆発を防ぐのに役立ちます。

from sklearn.preprocessing import StandardScalar

Step 6 −次に、次のようにsklearn.model_selectionからtrain_test_splitをインポートします−

from sklearn.model_selection import train_test_split

Step 7 −ドロップ mpg を使用してデータセットの列 drop方法。最後に、データセットをトレーニングと検証のセットに分割します。train_test_split 次のように機能します-

x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

Step 8 −ここで、サイズ1の別のinput_variableを作成する必要があります。これはNNの期待値を格納するために使用されます。

target = input_variable(1)
z = model(features)

データを分割して前処理したので、NNをトレーニングする必要があります。回帰モデルの作成中に前のセクションで行ったように、損失と損失の組み合わせを定義する必要がありますmetric モデルをトレーニングする関数。

import cntk
def absolute_error(output, target):
   return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
   loss = squared_error(output, target)
   metric = absolute_error(output, target)
   return loss, metric

それでは、トレーニング済みモデルの使用方法を見てみましょう。このモデルでは、損失とメトリックの組み合わせとしてcriteria_factoryを使用します。

from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)

完全な実装例

from cntk import default_option, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import relu
with default_options(activation=relu):
model = Sequential([Dense(64),Dense(64),Dense(1,activation=None)])
features = input_variable(X.shape[1])
target = input_variable(1)
z = model(features)
from sklearn.preprocessing import StandardScalar
from sklearn.model_selection import train_test_split
x = df_cars.drop(columns=[‘mpg’]).values.astype(np.float32)
y=df_cars.iloc[: , 0].values.reshape(-1, 1).astype(np.float32)
scaler = StandardScaler()
X = scaler.fit_transform(x)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
target = input_variable(1)
z = model(features)
import cntk
def absolute_error(output, target):
   return cntk.ops.reduce_mean(cntk.ops.abs(output – target))
@ cntk.Function
def criterion_factory(output, target):
loss = squared_error(output, target)
metric = absolute_error(output, target)
return loss, metric
from cntk.losses import squared_error
from cntk.learners import sgd
from cntk.logging import ProgressPrinter
progress_printer = ProgressPrinter(0)
loss = criterion_factory (z, target)
learner = sgd(z.parameters, 0.001)
training_summary=loss.train((x_train,y_train),parameter_learners=[learner],callbacks=[progress_printer],minibatch_size=16,max_epochs=10)

出力

-------------------------------------------------------------------
average  since   average   since  examples
loss     last    metric    last
------------------------------------------------------
Learning rate per minibatch: 0.001
690       690     24.9     24.9       16
654       636     24.1     23.7       48
[………]

回帰モデルを検証するには、モデルがトレーニングデータと同じように新しいデータを処理することを確認する必要があります。このために、を呼び出す必要がありますtest 上の方法 loss そして metric 次のようなテストデータとの組み合わせ-

loss.test([X_test, y_test])

出力-

{'metric': 1.89679785619, 'samples': 79}