質問内容
書籍「ゼロから作るDeepLearning」で勉強しております.
わからない箇所があるので質問させていただきます.
エラーが出ているわけではないのですが,どのような処理がされているのかを教えていただきたいです.
該当のソースコードには単純なニューラルネットワークにおいて損失関数から勾配を求める処理を行うプログラムを書きました.
コードの25コード目でラムダ式により損失関数が渡されています.numerical_gradientの引数とするために関数としたのはわかりますが,net.loss(x,t)はfloat型であることがわかりました.これを微分したら定数であるので0になるのではないですか?
実際,f = lambda w: 1.194949593668443としたところ,零行列が返されました.
多分,関数の場所を参照していると思うのですが,よくわかりません.
ご教授いただけたら幸いです.
該当のソースコード
Python
1import sys, os 2sys.path.append(os.pardir) 3import numpy as np 4from common.functions import softmax, cross_entropy_error 5from common.gradient import numerical_gradient 6 7class simpltNet: 8 def __init__(self): 9 self.W = np.random.randn(2,3) 10 11 def predict(self, x): 12 return np.dot(x, self.W) 13 14 def loss(self, x, t): 15 z = self.predict(x) 16 y = softmax(z) 17 loss = cross_entropy_error(y, t) 18 19 return loss 20 21x = np.array([0.6, 0.9]) 22t = np.array([0, 0, 1]) 23 24net = simpltNet() 25f = lambda w: net.loss(x, t) 26dW = numerical_gradient(f, net.W) 27 28print(dW)
補足情報(FW/ツールのバージョンなど)
「ゼロから作るDeepLearning」のサンプルコードを使用しています.
回答1件
あなたの回答
tips
プレビュー