ゼロから作るDeep Learning ❸ ―フレームワーク編
- 作者:斎藤 康毅
- 発売日: 2020/04/20
- メディア: 単行本(ソフトカバー)
Rubyで作るDeZero、ステップ24まで進んだのだがかなり厳しい。Numpyを使う方法にだいぶ慣れてきたので、いっそのこと実装をすべてRubyとNumpyのコンビネーションに移すことにした。そのために最初から再実装をはじめ、おおよそ2時間でステップ24まで進んだ。ステップ24のサンプル関数をすべて実装して、問題なく動作することを確認した。
begin def sphere(x, y) z = x ** 2.0 + y ** 2.0 return z end x = Variable.new(np.array(1.0)) y = Variable.new(np.array(1.0)) z = sphere(x, y) z.backward() puts [x.grad, y.grad].to_s end begin def matyas(x, y) z = ((x ** 2.0 + y ** 2.0) * 0.26) - (x * y * 0.48) return z end x = Variable.new(np.array(1.0)) y = Variable.new(np.array(1.0)) z = matyas(x, y) z.backward() puts [x.grad, y.grad].to_s end begin def goldstein(x, y) z = (((x + y + 1)**2) * (x*(-14) + (x**2)*3 - y*14.0 + x*y*6.0 + (y**2)*3 + 19) + 1) * (((x*2 - y*3)**2) * (x*(-32.0) + (x**2)*12 + y*48.0 - x*y*36.0 + (y**2)*27 + 18) + 30) return z end x = Variable.new(np.array(1.0)) y = Variable.new(np.array(1.0)) z = goldstein(x, y) z.backward() puts [x.grad, y.grad].to_s end
[2.0, 2.0] [0.040000000000000036, 0.040000000000000036] [-5376.0, 8064.0]
問題無く動作した。以降はこのRuby+Numpyのコンビネーションで実装を進めていく。