Neural Network Consoleによる学習済みニューラルネットワークの利用
環境構築
ベースはanaconda。nnablaがなく、importに失敗するのでパッケージ追加しました。以下のコマンドを管理者で開いたコンソールで実行。
pip install ipykernel pip install nnabla
事前にpip自体の更新が必要な場合もあり。
python -m pip install --upgrade pip
コードの作成と推論の実行
以下を参考に、アヤメのデータで学習して、推論するところまで。
学習はGUI使いました。学習済みパラメータファイルが20180520_142204というフォルダにある想定です。
import nnabla as nn import nnabla.functions as F import nnabla.parametric_functions as PF #loss関数を削るのでyが不要になる。 #def network(x, y,test=False): def network(x, test=False): # Input -> 4 # BatchNormalization with nn.parameter_scope('BatchNormalization'): h = PF.batch_normalization(x, (1,), 0.9, 0.0001, not test) # Affine -> 50 with nn.parameter_scope('Affine'): h = PF.affine(h, (50,)) # ReLU h = F.relu(h, True) # Affine_2 -> 20 with nn.parameter_scope('Affine_2'): h = PF.affine(h, (20,)) # ReLU_2 h = F.relu(h, True) # Dropout if not test: h = F.dropout(h) # Affine_3 -> 3 with nn.parameter_scope('Affine_3'): h = PF.affine(h, (3,)) # Softmax h = F.softmax(h) # SquaredError # 不要なのでコメントアウト # h = F.squared_error(h, y) return h
以降が追加した推論用のコード。実際には上のコードと同じファイルに記載。
# load parameters # \を/に書き換え必要あり。オリジナルのブログはシングルクオートが全角なので書き換えが必要。 nn.load_parameters('C:/iris_sample/iris_sample.files/20180520_142204/parameters.h5') # Prepare input variable # 3つ推論する場合 x=nn.Variable((3,4)) # 1つ推論する場合 x1=nn.Variable((1,4)) x2=nn.Variable((1,4)) x3=nn.Variable((1,4)) # Let input data to x.d # x.d = ... x.d=[[5.1, 3.5, 1.4, 0.2],[7, 3.2, 4.7, 1.4],[6.3, 3.3, 6, 2.5]] #yの1番目が大きな値になる。listを作って渡せばいいのは楽。 x1.d=[5.1, 3.5, 1.4, 0.2] #yの2番目が大きな値になる。 x2.d=[7, 3.2, 4.7, 1.4] #yの3番目が大きな値になる。 x3.d=[6.3, 3.3, 6, 2.5] # Build network for inference # test=Trueで、ドロップアウトの機能を停止する。BatchNormalizationへの影響は不明。 y = network(x, test=True) # Execute inference y.forward() print(y.d)
実行結果。指数表示なので大小関係わかりにくいがあってるはず。
#[[9.9891686e-01 9.9650992e-04 8.6744032e-05] # [7.5185834e-03 7.6037079e-01 2.3211062e-01] # [7.9514321e-06 3.5711315e-02 9.6428072e-01]]