human
4.4.2 ニューラルネットワークに対する勾配
ニューラルネットワークでは重みパラメータに関する損失関数の勾配を求める。形状2×3の重み$W$だけ持つニューラルネットワークにおいて損失関数をLで表す場合、勾配は$\frac{\delta L}{\delta W}$と表せる
$$
W = \begin{pmatrix}
w_{1 1} &　w_{2 1} &　w_{3 1} \
w_{1 2} &　w_{2 2} &　w_{3 2}
\end{pmatrix}
$$
$$
\frac{\delta L}{\delta W} = \begin{pmatrix}
\frac{\delta L}{\delta w_{1 1}} &　\frac{\delta L}{\delta w_{2 1}} &　\frac{\delta L}{\delta w_{3 1}} \
\frac{\delta L}{\delta w_{1 2}} &　\frac{\delta L}{\delta w_{2 2}} &　\frac{\delta L}{\delta w_{3 2}} \
\end{pmatrix}
$$
勾配を求める実装は以下のようになる。
予測するためのメソッドpredict(x)、損失関数の値を求めるメソッドloss(x, t)が存在する。xは入力データ、tは正解ラベルである。
 Can you provide a the Python program you requested?
assistant
#Here is the Python program you requested.
import sys, os
sys.path.append(os.pardir)  # 親ディレクトリのファイルをインポートするための設定
import numpy as np
from src.functions import softmax, cross_entropy_error
from src.gradient import numerical_gradient

class simpleNet:
    def __init__(self):
        self.W = np.random.randn(2,3)

    def predict(self, x):
        return np.dot(x, self.W)

    def loss(self, x, t):
        z = self.predict(x)
        y = softmax(z)
        loss = cross_entropy_error(y, t)

        return loss

net = simpleNet()
print(net.W)  # 重みパラメータ

x = np.array([0.6, 0.9])
p = net.predict(x)
print(p)  # 予測値

print(np.argmax(p))  # 最大値のインデックス

t = np.array([0, 0, 1])  # 正解ラベル
print(net.loss(x, t))