以下のコードの意味を教えて頂けると幸いです。コード内の#(number)と段落部分は対応してると考えて頂けると幸いです。
chainer
1import chainer 2from chainer import cuda, Function, gradient_check, Variable, optimizers, serializers, utils 3import chainer.functions as F 4 5x = Variable(np.array([-1], dtype=np.float32)) #1 6print(F.sin(x).data) 7 8x = Variable(np.array([-0.5], dtype=np.float32)) #2 9z = F.cos(x) 10print(z.data) 11 12print(((-1) * F.sin(x)).data) #3 13 14x = Variable(np.array([-1,0,1], dtype=np.float32)) #4 15z = F.sin(x) 16z.grad = np.ones(3, dtype=np.float32) 17z.backward() 18print(z.grad)
1
自身の解釈では、上記コードはsin関数に-1を代入した値だと思います。sin関数に-1を代入することなど可能なのでしょうか。ここでは、それが可能になっているのが不思議です。arcsinでないのかと思うのですがあまり確信が持てず悩んでいます。
2
同様にcos関数に-0.5というのが意味が分からないです。
3
出力が0.47942555と表示されるのですが、sin関数に-0.5を代入して-1を掛けた値だと思うのですが、
chainer
1x = Variable(np.array([-0.5], dtype=np.float32)) #2 2z = F.cos(x) 3z.backward() 4print(x.grad)
の値、つまりcosをxで偏微分した値と同値ですが、これは何か意味があるのでしょうか。
4
[-1, 0, 1]をcos関数(sin関数を微分した)に代入したという解釈なのですが、途中のz.grad = np.ones(3, dtype=np.float32)の意味が分からないです。加えて、出力がnoneとなり何も出力されないことから、この解釈が間違っていると思うのですが、どこが間違っているのか分かりません。
ご教授頂けると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー