はじめに
書籍「機械学習と深層学習」を購入して勉強していたら、C言語で書いてあるプログラムが簡単そうだったので、Rubyで書き換えてみることにしました。
ちなみに、書籍で紹介されているソースコードは以下のURLからダウンロード可能です。
neuron.c
第4章 ニューラルネット
4.1 ニューラルネットワークの基礎
上記のneuron.cをRubyで書き換えてみました。
なお、完全に同一ではありませんので悪しからず。
neuron.rb
# ライブラリの読込
include Math
# 定数の定義
$maxinputno = 100
# 学習データの読み込み
def getdata()
e = [
[0.0,0.0],
[0.0,1.0],
[1.0,0.0],
[1.0,1.0]
]
return e
end
# 順方向の計算
def forward(w, e)
u = 0.0
i = 0
e.each do |val|
u += val * w[i]
i += 1
end
u -= w[i]
return f(u)
end
# 重みの初期化
def initw(n_of_row)
w = Array.new(n_of_row + 1)
w[0] = 1.0
w[1] = 1.0
w[2] = 1.5
return w
end
# 伝達関数
def f(u)
x = 0.0
if u >= 0.0
x = 1.0
else
x = 0.0
end
return x
#return 1.0 / (1.0 + exp(-u))
end
# メインプログラム
e = getdata()
w = initw(e[0].length)
n_of_e = e.length
puts "データの個数:#{n_of_e}"
o = 0.0
e.each do |vals|
o = forward(w, vals)
puts "入力: #{vals}, 出力: #{o}"
end
実行
$ ruby neuron.rb
データの個数:4
入力: [0.0, 0.0], 出力: 0.0
入力: [0.0, 1.0], 出力: 0.0
入力: [1.0, 0.0], 出力: 0.0
入力: [1.0, 1.0], 出力: 1.0
できた!