まず一番下のInstallationを読むこと。
./invalid/invalid_keras.py
のモデルは不正で、長さ6のベクトルと3x2の行列を加算レイヤーの入力に与えている。
TensorSafeDAGで書くと以下の型定義である。TensorSafeDAGではこの形状不一致を正しく捕捉する。
type Input = Input ('D2 3 2)
type L1 = Flatten Input
type Output = 'Add L1 Input -- error!
invalid :: MkNetwork Output ('D1 6)
invalid = MkNetwork
Kerasでも、対応する深層学習モデル./invalid/invalid_keras.py
を実行すると以下の形状不一致エラーが出力される。
$ python3 ./invalid/invalid_keras.py
ValueError: Inputs have incompatible shapes. Received shapes (3, 2) and (6,)
しかし、まったく同じモデルに対し、TensorSafeでは形状不一致エラーを検出できない。
$ stack runghc ./invalid/InvalidTs.hs
Model successfully created with type-level shape checking
これはTensorSafeでは以下の2箇所でしか形状検査をしていないのが理由。
MkINetwork
の第一引数のリスト内の連続するレイヤー間- モデルの出力テンソルの形状と与えられた期待テンソル形状
上記のプログラムでは2.の検査しかしておらず、Add
の引数を使った形状一致検査については何もしていない。
The TensorSafeDAG is implemented in Haskell, and the latest version of GHC is recommended. Please install the necessary packages using the steps below.
# TensorSafeDAG dependencies
TensorSafeDAG
└── GHC (latest)
Install the packages necessary for building GHC (including libGMP, libtinfo, and gcc).
--- Ubuntu
sudo apt update
sudo apt install libgmp-dev libtinfo-dev build-essential
-- Mac
brew update && brew install gmp ncurses
xcode-select --install
Install GHC, stack, and cabal via GHCup.
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
source ~/.bashrc # enabling ghcup
Switch version of GHC on GHCup tui.
ghcup tui
# Move the cursor to the GHC tab on the GHCup GUI.
# Press 'a' to display past versions.
# Press 'i' to Install the latest GHC version
✔✔ GHC x.y.z
stack run
...
Model successfully created with type-level shape checking.
stack test
...
Success!