LoginSignup
1

More than 5 years have passed since last update.

書籍「機械学習と深層学習」のソースコードをRubyに書き換えてみる(neuron.c編)

Last updated at Posted at 2016-12-02

はじめに

書籍「機械学習と深層学習」を購入して勉強していたら、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

できた!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1