機械学習:ニューラルネットワークのビジュアルモデリング機能を使ってみた

初めまして、エンジニアのホンです。

今日はAlibabaCloudが提供する機械学習PAI-DSWの『FastNeuralNetwork』機能について、ご紹介します。

 

複雑なディープラーニングネットワークは通常、数十行または数百行のコードで構成され、ネットワークの各層は以下に示すように多くのパラメーターで構成されます。

f:id:sbc_hong:20200311154952p:plain

 

レイヤーの数が増えると、コードを使用して深層学習ネットワークを構築することが難しくなり、維持および調整が困難になります。 FastNeuralNetwork機能は、ディープラーニング構成コードをワンクリックでネットワークアーキテクチャグラフに変換し、視覚的な編集を実現できます。これにより、以下に示すように、モデルの解釈性と保守性が大幅に向上します。

 

f:id:sbc_hong:20200312134027g:plain


 

 これから、モデルを構築しながら、FastNeuralNetwork機能の使い方をご紹介します。

 

 

 

機械学習PAI-DSW:FastNeuralNetwork機能紹介

FastNeuralNetwork機能の使い方(KerasCodeとKerasGraph)

1、プロジェクト作成

DSWを開いて、まずプロジェクトを作成します

f:id:sbc_hong:20200312150307p:plain

現時点では、KerasCodeカーネルKerasGraphカーネルのみがFastNeuralNetwork機能を実装しています。

KerasCode:ディープラーニングネットワークコードを記述してから、コードをグラフに変換できる。

KerasGraph:キャンバスから直接深層学習ネットワークを構築し、グラフをコードに変換できる。

 *1


2、コードでモデルを構築

KerasCodeを開いて、以下のコードを書き込みます。

import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
from keras.initializers import VarianceScaling, Zeros
from keras.layers.core import Dense, Dropout, Activation  
from keras.optimizers import SGD  
from keras.datasets import mnist  
import numpy 
import matplotlib.pyplot as plt

'''
    1、モデルを選ぶ
'''
model = Sequential()
'''
   2、ニューラルネットワークの構築
'''

model.add(Dense(bias_initializer=Zeros(), batch_input_shape=(None, 784), dtype='float32', use_bias=True, units=500, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='tanh', trainable=True))
model.add(Dropout(rate=0.4, trainable=True))

model.add(Dense(bias_initializer=Zeros(), use_bias=True, units=500, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='tanh', trainable=True))
model.add(Dropout(rate=0.4, trainable=True))

model.add(Dense(bias_initializer=Zeros(), use_bias=True, units=10, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='softmax', trainable=True))

上のコードにはSequentialモデルが組み込まれており、モデルオブジェクトはmodelです。下のMagicCommandと入力すると、コードをグラフに変換できます。

%show_model model

f:id:sbc_hong:20200311180032p:plain

f:id:sbc_hong:20200311180215p:plain



 
3、モデル学習させ

モデルが完了したら、トレニーングコードを補完して、早速学習させてみます。

結果は以下となります。

giste62d47f9ec4721ba288c4061d403ce3e

 

 

 4、ニューラルネットワーク編集

 

FNN機能は、KerasのCellをキャンバスにドラッグして編集する機能を実装しております。キャンバスは、Cellリストフィルード、キャンバス編集フィルード、およびパラメーター構成フィルードに分かれています。

 

f:id:sbc_hong:20200311202307p:plain

 

同じ機能を持つセルは自動的にグループに配置されます:

 

 

キャンバスのコンポーネントは、コードで自動的にマッピングされます:

 

f:id:sbc_hong:20200311202932p:plain



キャンバスでCellまたは関係を選択してバックスペースキーを押すと、キャンバスまたは関係を削除できます。

 

今回は入力層と中間層のUnitsを500から784に変更してみます。

f:id:sbc_hong:20200311203710p:plain

編集が終わったら、左上の「To Code」ボタンを押すと、以下のウィンドウをポップアップします。これにより、キャンバスの変更によってコードにどのような変更が生じるかがわかります。

f:id:sbc_hong:20200311204515p:plain

[OK]をクリックして、元のコードファイルに新しいモデル構築コードを生成します。

新しく生成したコードは以下となります。

import keras
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout
from keras.initializers import VarianceScaling, Zeros

model = Sequential()
model.add(Dense(bias_initializer=Zeros(), batch_input_shape=(None, 784), dtype='float32', use_bias=True, units=784, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='tanh', trainable=True))
model.add(Dropout(rate=0.4, trainable=True))
model.add(Dense(bias_initializer=Zeros(), use_bias=True, units=784, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='tanh', trainable=True))
model.add(Dropout(rate=0.4, trainable=True))
model.add(Dense(bias_initializer=Zeros(), use_bias=True, units=10, trainable=True, kernel_initializer=VarianceScaling(mode='fan_avg', seed=None, scale=1.0, distribution='uniform'), activation='linear'))
model.add(Activation(activation='softmax', trainable=True))

 


5、新しく生成したモデルを学習させてみます。

結果は以下となります。

gist1121fa7341e133ec0d79fda38b532e4f

 

 

まとめ

ということで、シンプルなモデルの構築、グラフ化、直感的な編集を通じて、FastNeuralNetwork機能を紹介しました。コードをワンクリックでグラフに変換し、視覚的な編集ができることにより、モデルの解釈性と保守性が大幅に向上しました。是非使ってみてくださいね。

 

 

*1:左側のデモリストにある公式コードFNNDemoを直接使用することもできますよ、興味がある方是非お試しくださいね。