演算モデル (Operation models)

models モジュールには、ネットワークを構成するための各種演算モデルがあります。

DifferentiableLut クラス

class binarybrain.models.DifferentiableLut(output_shape=None, *, input_shape=None, connection='random', binarize=True, batch_norm=True, momentum=0.0, gamma=0.3, beta=0.5, seed=1, name=None, N=6, bin_dtype=DType.FP32, real_dtype=DType.FP32, core_model=None)

ベースクラス: SparseModel

DifferentiableLut class

微分可能LUTモデル

内部計算的には StocasticLUT + BatchNormalization + Binarize(HardTanh) で構成される

FPGA合成するためのルックアップテーブル型のモデルを学習することができる 純粋な Stochastic 演算のみを行いたい場合は binarize と batch_norm の両方を False にすればよい。

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • connection (str) -- 結線ルールを 'random', 'serial', 'depthwise' から指定可能

  • batch_norm (bool) -- BatchNormalization を有効にするか

  • binarize (bool) -- 二値化出力を有効にするか

  • momentum (float) -- BatchNormalization の momentum

  • gamma (float) -- BatchNormalization の gamma

  • beta (float) -- BatchNormalization の beta

  • N (int) -- LUTの入力数

  • seed (int) -- 変数初期値などの乱数シード

  • bin_dtype (DType)) -- バイナリ出力の型を bb.DType.FP32 と bb.DType.BIT から指定(bb.DType.BIT は binarize=True 時のみ)

W()

重み行列取得

コピーではなくスライス参照を得ており、本体の値を書き換え可能

戻り値

重み行列を指すTensor

戻り値の型

W (Tensor)

dW()

重みの勾配行列取得

コピーではなくスライス参照を得ており、本体の値を書き換え可能

戻り値

重みの勾配を指すTensor

戻り値の型

W (Tensor)

AverageLut クラス

class binarybrain.models.AverageLut(output_shape=None, *, input_shape=None, name=None, N=6, connection='serial', binarize=True, binarize_input=False, seed=1, bin_dtype=DType.FP32, real_dtype=DType.FP32, core_model=None)

ベースクラス: SparseModel

AverageLut class

入力値の平均を出力するLUT型のモデル バイナリの場合、bitをカウントして1の方が多ければ1を出力するテーブル固定のLUTと考える事ができる

パラメータ
  • output_shape ([int]) -- 出力のシェイプ

  • connection (str) -- 結線ルールを 'random', 'serial', 'depthwise' から指定可能

  • binarize (bool) -- 二値化出力を有効にするか

  • binarize_input (bool) -- 入力を二値化してから使うようにするか

  • N (int) -- LUTの入力数

  • seed (int) -- 変数初期値などの乱数シード

  • bin_dtype (DType)) -- バイナリ出力の型を bb.DType.FP32 と bb.DType.BIT から指定(bb.DType.BIT は binarize=True 時のみ)

BinaryLut クラス

class binarybrain.models.BinaryLut(output_shape=None, *, input_shape=None, connection='random', seed=1, name=None, N=6, fw_dtype=DType.FP32, bw_dtype=DType.FP32, core_model=None)

ベースクラス: SparseModel

バイナリLUTモデル

一般的なFPGAのLUTと同等の機能をするモデル。 学習能力はなく、他のモデルで学習した結果をインポートしてモデル評価を行うためのもの

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • connection (str) -- 結線ルールを 'random', 'serial', 'depthwise' から指定可能(未実装)

  • N (int) -- LUTの入力数

  • seed (int) -- 変数初期値などの乱数シード

  • fw_dtype (DType)) -- forwardの型を bb.DType.FP32 と bb.DType.BIT から指定

static from_sparse_model(layer, *, fw_dtype=DType.FP32)

他のモデルを元に生成

インポート元は入出力が同じ形状をしている必要があり、デジタル値の入力に対して 出力を 0.5 を閾値として、バイナリテーブルを構成して取り込む

パラメータ

leyaer (Model) -- インポート元のモデル

import_layer(leyaer)

他のモデルからからインポート

インポート元は入出力が同じ形状をしている必要があり、デジタル値の入力に対して 出力を 0.5 を閾値として、バイナリテーブルを構成して取り込む

パラメータ

leyaer (Model) -- インポート元のモデル

DenseAffine クラス

class binarybrain.models.DenseAffine(output_shape=None, *, input_shape=None, initialize_std=0.01, initializer='', seed=1, name=None, dtype=DType.FP32, core_model=None)

ベースクラス: Model

DenseAffine class

普通のDenseAffine

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • initialize_std (float) -- 重み初期化乱数の標準偏差

  • initializer (str) -- 変数の初期化アルゴリズム選択(default/normal/uniform/He/Xavier)。

  • seed (int) -- 変数初期値などの乱数シード

DenseAffineQuantize クラス

class binarybrain.models.DenseAffineQuantize(output_shape=None, *, input_shape=None, quantize=True, weight_bits=8, output_bits=16, input_bits=0, weight_scale=0.00390625, output_scale=0.00390625, input_scale=0.00390625, initialize_std=0.01, initializer='', seed=1, name=None, dtype=DType.FP32, core_model=None)

ベースクラス: Model

DenseAffineQuantize class

DenseAffine に量子化のサポートを付けたもの

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • initialize_std (float) -- 重み初期化乱数の標準偏差

  • initializer (str) -- 変数の初期化アルゴリズム選択(default/normal/uniform/He/Xavier)。

  • quantize (bool) -- 量子化の有効状態の初期値

  • weight_bits (int) -- 重みの量子化bit数 (0で量子化しない)

  • output_bits (int) -- 入力の量子化bit数 (0で量子化しない)

  • input_bits (int) -- 出力の量子化bit数 (0で量子化しない)

  • weight_scale (float) -- 重みの量子化スケール(0でbit数に合わせる)

  • output_scale (float) -- 入力の量子化スケール(0でbit数に合わせる)

  • input_scale (float) -- 出力の量子化スケール(0でbit数に合わせる)

  • seed (int) -- 変数初期値などの乱数シード

DepthwiseDenseAffine クラス

class binarybrain.models.DepthwiseDenseAffine(output_shape=None, *, input_shape=None, input_point_size=0, depth_size=0, initialize_std=0.01, initializer='', seed=1, name=None, dtype=DType.FP32, core_model=None)

ベースクラス: Model

DepthwiseDenseAffine class

普通のDepthwiseDenseAffine

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • input_point_size (int) -- 入力のpoint数

  • depth_size (int) -- depthサイズ

  • initialize_std (float) -- 重み初期化乱数の標準偏差

  • initializer (str) -- 変数の初期化アルゴリズム選択(default/normal/uniform/He/Xavier)。

  • seed (int) -- 変数初期値などの乱数シード

DepthwiseDenseAffineQuantize クラス

class binarybrain.models.DepthwiseDenseAffineQuantize(output_shape=None, *, input_shape=None, input_point_size=0, depth_size=0, quantize=True, weight_bits=8, output_bits=16, input_bits=0, weight_scale=0.00390625, output_scale=0.00390625, input_scale=0.00390625, initialize_std=0.01, initializer='', seed=1, name=None, dtype=DType.FP32, core_model=None)

ベースクラス: Model

DepthwiseDenseAffineQuantize class

DepthwiseDenseAffine に量子化のサポートを付けたもの

パラメータ
  • output_shape (List[int]) -- 出力のシェイプ

  • input_point_size (int) -- 入力のpoint数

  • depth_size (int) -- depthサイズ

  • weight_bits (int) -- 重みの量子化bit数 (0で量子化しない)

  • output_bits (int) -- 入力の量子化bit数 (0で量子化しない)

  • input_bits (int) -- 出力の量子化bit数 (0で量子化しない)

  • weight_scale (float) -- 重みの量子化スケール(0でbit数に合わせる)

  • output_scale (float) -- 入力の量子化スケール(0でbit数に合わせる)

  • input_scale (float) -- 出力の量子化スケール(0でbit数に合わせる)

  • initialize_std (float) -- 重み初期化乱数の標準偏差

  • initializer (str) -- 変数の初期化アルゴリズム選択(default/normal/uniform/He/Xavier)。

  • seed (int) -- 変数初期値などの乱数シード