アーキテクチャコンストラクト

アーキテクチャコンストラクトは、AI モデルが構築される場所です。この例に示すように、次の 3 つのブロックが含まれています。

architecture:
    input:  x ~ text: [200] ;
    output: y ~ flat: [2] ;

    x -> Embedding: [20000, 128]
      -> Dropout: [0.5]
      -> Conv1D: [64, 4]
      -> MaxPooling1D: [pool_size=4]
      -> LSTM: [128]
      -> Dense: [3, activation='sigmoid']
      -> y ;
  • inputにより、入力データの変数と形状が定義されます。これは、ソースコンストラクトの入力コンポーネントで定義されているものと一致する必要があります。このブロックの構文は次のとおりです。
input: variable ~ data_type: [shape] ;
  • output これにより、モデルの出力の変数と形状が定義されます。これは、ソースコンストラクトの出力コンポーネントで定義されているものと一致する必要があります。このブロックの構文は次のとおりです。
output: variable ~ data_type: [shape] ;
  • neuralflow ここで、AI モデル自体が定義されます。ニューラルフローは、入力を出力に接続する一連のネットワークレイヤーです。NeoPulse® AI Studio はKeras ディープラーニングライブラリのサブセットの上に構築されており、機械学習のエキスパートがすでに持っている知識を簡単に活用して新しいアーキテクチャを迅速にプロトタイプ化できます。

auto

分類タスクの場合、AI oracle は、ニューラルフロー宣言で auto キーワードを使用して、問題の複雑さに基づいてアーキテクチャを自動的に決定できます。

architecture:
    input:  x ~ text: [200] ;
    output: y ~ flat: [1] ;

    x -> auto -> y ;

NeoPulse® AI Studio の AI オラクルの改善に常に取り組んでおり、より多くのタスクのための自動アーキテクチャが近く公開される予定です。

アーキテクチャの定義

NML を使用すると、ニューラルフロー構文を使用してニューラル ネットワーク アーキテクチャを設計することが非常に簡単になります。NeoPulse® AI Studio はKeras ディープラーニングライブラリのほとんどを利用できるため、Keras レイヤー API を使用してカスタム AI モデルを簡単に構築できます。レイヤー呼び出しの NML 構文は、一般的に次のとおりです。

x -> LayerName: [argument1, argument2, named_argument=value...] -> ... -> y

例を見ると直ぐわかります。次のアーキテクチャ構造を考えてみましょう。

architecture:
    input:  x ~ text: [200] ;
    output: y ~ flat: [2] ;

    x -> Embedding: [20000, 128]
      -> Dropout: [0.5]
      -> Conv1D: [64, 4]
      -> MaxPooling1D: [pool_size=4]
      -> LSTM: [128]
      -> Dense: [3, activation='sigmoid']
      -> y ;

この例では、テキスト入力は 6 層ニューラルフローに流され、出力はバイナリ分類子です。つまりテキストが 3 つのクラスのそれぞれに属する確率です。このアーキテクチャ例では、次の 6 つのレイヤーを使用して AI モデルを構築します。

  • Embedding: は、次の構文を使用して呼び出されます。 Embedding: [2000, 128].必要な引数 input_dim および output_dim は暗黙的に順番に定義されます。

  • Dropout: は、次の構文を使用して呼び出されます。 Dropout: [0.5] 必要な引数 rate が暗黙的に定義されています。

  • Conv1D: は、次の構文を使用して呼び出されます。 Conv1D[64, 4]. .必要な引数 filter および kernel_size は暗黙的に順番に定義されます。

  • MaxPooling1D は、次の構文を使用して呼び出されます。 MaxPooling1D: [pool_size=4]. デフォルト値の pool_size は、直接指定することでオーバーライドされます。

  • LSTM: は、次の構文を使用して呼び出されます。 LSTM: [128]. 必要な引数 units は暗黙的に定義されます。

  • Dense: は、次の構文を使用して呼び出されます。 Dense: [3]. 必要な引数 units は暗黙的に定義されます。

フローインジケータ -> は入力から出力にレイヤーを接続します。

注意 事項

この文章の執筆時点で、いくつかの注意点があります。

*NML はスクリプト言語であり、開発言語ではありません。したがって、Keras API にサポートしていないものがいくつかあります。

  • レイヤーのデフォルト初期化設定の変更。
  • Lambda レイヤー。
  • 高度なアクティベーションレイヤー
  • keras.backend
  • 新しいレイヤーを作成
  • 新しいレイヤーラッパーの作成

以前にトレーニングされたモデルの操作

以前にトレーニングされたモデルを使う理由は数多くあります。NeoPulse® AI Studio を使用すると、 from コンストラクタを使用して、以前にトレーニングされたモデルを簡単に読み込んで再トレーニングできます。

追加のトレーニング データを取得し、より大きなデータセットでモデルを再トレーニングするとします。次の NML スクリプトを参考にしてください。

oracle("generated") = 2

source:
  bind = "training_data.csv" ;
  input:
    x ~ from "Review"
        -> text: [200] -> TextDataGenerator: [nb_words = 20000] ;
  output:
    y ~ from "Label" -> flat: [2] -> FlatDataGenerator: [] ;
  params:
    validation_split = 0.5,
    batch_size = 64,
    shuffle_init = True;

architecture:
    input:  x ~ text: [200] ;
    output: y ~ flat: [2] ;

    x -> Embedding: [20000, 128]
      -> Dropout: [auto(0.25 ? 0.50 | name = "Drop")]
      -> Convolution1D: [64, 4]
      -> MaxPooling1D: [pool_size = 4]
      -> LSTM: [128]
      -> Dense: [2, activation = 'sigmoid']
      -> y ;

train:
  compile:
    optimizer = 'rmsprop',
    loss = 'binary_crossentropy',
    metrics = ['accuracy'] ;
  run:
    epochs = 4 ;

  dashboard: ;

新しいデータを使用してこのモデルを再トレーニングしてみましょう。

  • まず、検証セット内の最も正確なモデルを特定します。
$ neopulse top my_project --metrics=val_acc
  • PIM をエクスポートします。
$ neopulse export my_project -p /absolute/path/to/my/directory -f myPIM
  • 次に、元のトレーニング スクリプトをコピーし、次の変更を行います (retrain.nml として保存します)。

    1. from コンストラクタと再トレーニングするモデルへのパスを使用するようにアーキテクチャコンストラクト宣言を変更します。

      architecture from "myPIM.pim":

    2. ドロップアウトレイヤー宣言を変更してauto キーワードをこのモデルの値に置き換えます。

      -> Dropout: [0.50]

    3. 新しいトレーニング データを含む .csv ファイルの名前またはパスが異なる場合は、その名前も変更します。

      bind = "new_data.csv" ;

  • 次に、再トレーニング スクリプトを送信します

$ neopulse train -p retrain_model -f retrain.nml

注:AI モデルをロードして再トレーニングする場合、ハイパー パラメータ(ドロップアウト レートなど)を変更できますが、レイヤーの形状を変更はできません。