ボンジニアの備忘録

中小SIerからWeb系のベンチャーに企業に転職。基本的にはごく普通の平凡なエンジニアです。思ったことをつらつら書いていきます。

numpyライクなElixirのライブラリー開発日誌(5)

プログラム開発

今回は今まで作ったNumexyライブラリで論理ゲートのXORを作成します。XORはAND、OR、 NANDを組み合わせて作れますのでそのパーツをまず作成します。

出力層の作成

  def output(x) when x <= 0, do: 0
  def output(x) when x > 0, do: 1

ANDの作成

  def lgAND(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([0.5, 0.5])
    b = -0.7
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
  end

NANDの作成

  def lgNAND(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([-0.5, -0.5])
    b = 0.7
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
  end

ORの作成

  def lgOR(x1,x2) do
    x = Numexy.new([x1, x2])
    w = Numexy.new([0.5, 0.5])
    b = -0.2
    Numexy.mul(x, w) |> Numexy.sum |> Kernel.+(b) |> output
  end

XORの作成

  def lgXOR(x1,x2) do
    lgAND(lgNAND(x1, x2), lgOR(x1, x2))
  end

実行

iex> lgXOR(0,0)
0
iex> lgXOR(1,0)
1
iex> lgXOR(0,1)
1
iex> lgXOR(1,1)
0

まとめ

Numexyを使うことで論理ゲートを実装することができました。ただ計算式部分がどうしても関数の組み合わせになり見づらいところがあるのが今後の改善ポイントになります。
とはいうものしっかりとXORは書けたのは嬉しい!!

ツイッターもやっていますのでよかったらフォローをしていただけると嬉しいです。
twitter.com